我一直在阅读其他问题和答案,但我无法找到解决方案的答案。
我有以下情况:
class BaseA {}
class BaseB {}
IInterface<TClassA, TClassB>
where TClassA : BaseA
where TClassB : BaseB
IterfaceImplementation<TClassA, TClassB> :IInterface<TClassA, TClassB>
where TClassA : BaseA
where TClassB : BaseB
class A : BaseA {}
class B : BaseB {}
注意:BaseA和BaseB不实现接口。
使用此设置我需要做什么才能使Ninject绑定
IIntreface<A,B>
到
InterfaceImplementation<A,B>
我必须有一个绑定
kernel.Bind<IInterface<A,B>>().To<InterfaceImplementation<A,B>>()
但是,我试图避免这种情况,因为BaseA
和BaseB
的多个实现,并且不希望必须为每个实现执行其他绑定。我想做的是
Bind<IInterface<Any(BaseA), Any(BaseB>>().To<InterfaceImplementation<ThatSame(A), ThatSame(B)>>();
有什么办法吗?
答案 0 :(得分:1)
指定open generics在.NET中的工作方式始终相同:
kernel.Bind(typeof(IInterface<,>)).To(typeof(InterfaceImplementation<,>));
将绑定它,以便任何接口关闭类型将用于实现。逗号可以用作分隔符来指定打开的通用参数的数量。