我有通用类型IMyGeneric<T> where T : IBase
。
如何让所有类型在ninject中继承IMyGeneric<T>
?
我试过了:
this.kernel.GetAll<IMyGeneric<IBase>>();
但这不起作用,返回0结果。
我可以获取继承IBase
然后foreach
所有类型的所有内容并使用this.kernel.Get(type)
,但之后我会IEnumerable<object>
而不是IEnumerable<IMyGeneric<IMyInheritedType>>
并且会然后无法投射和返回特定类型,例如IEnumerable<IMyGeneric<IBase>>
因为我在演员表上收到错误。
答案 0 :(得分:1)
Ninject仅支持注入特定注册的类型。除了两个例外:
FooClass
并且FooClass
包含可访问的构造函数时)。表示如果要解决多个IMyGeneric<IBase>
,则需要注册几个:
Bind<Apple>().To<IMyGeneric<IBase>>();
Bind<Pear>().To<IMyGeneric<IBase>>();
或者,如果这些类型需要通过多种类型解析:
Bind(typeof(Apple)).To(typeof(IMyGeneric<IBase>), typeof(IMyGeneric<Apple>));
您可以使用Conventions Extension并使用自定义IBindingGenerator
来创建绑定,而不是手动定义所有绑定。
或者当然,您也可以编写自己的基于反射的助手。