嗨,我正在尝试为ServiceStack
.
Ninject 有两种解析方法,get 和 getall。当您尝试解析以下列表时,应使用 GetAll:
Interface[] arrayOfInterfaces = _kernel.GetAll(typeof(Interface))
问题是这个和服务堆栈之间的不匹配。我想出了这个解决方案,但我对此并不满意。任何关于如何更好地实现这一点的帮助或想法将不胜感激。
public T Resolve<T>()
{
if (typeof (Array).IsAssignableFrom(typeof (T)))
{
throw new NotSupportedException("Can not resolve array types, use IEnumerable");
}
if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(IEnumerable<>))
{
var elementType = typeof(T).GetGenericArguments()[0];
var listOfTypes = Activator.CreateInstance(typeof(List<>).MakeGenericType(elementType)) as IList;
foreach (var o in _kernel.GetAll(elementType))
{
listOfTypes.Add(o);
}
return (T)listOfTypes;
}
return _kernel.Get<T>();
}
而且目前它只支持IEnumerable<T>
而不支持T[]