【发布时间】:2017-01-10 09:04:33
【问题描述】:
我有泛型类型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>> 因为我在施法时出错。
【问题讨论】:
-
将
IMyGeneric<T>转换为IMyGeneric<IBase>仅在接口定义为变体类型时才有效:IMyGeneric<out T>,但即便如此我认为 Ninject 并不真正支持这一点。因此,即使您注册了不同类型的IMyGeneric<T>列表,Ninject 也可能不会为您获取这些类型。 -
基于约束获取所有实现的任何其他方式?还是创建 IBaseConstraint(仅用于约束)然后通过 IBase 获取所有内容?虽然我不太喜欢这个主意。
-
您可能想要更多地展示您的实际实施,以便我们为您提供有关如何进行的反馈。
标签: generics types interface ninject type-constraints