Ninject使用具有相同结束类型的开放通用实现绑定开放通用接口

时间:2018-03-21 18:56:44

标签: c# generics dependency-injection ninject

我一直在阅读其他问题和答案,但我无法找到解决方案的答案。

我有以下情况:

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>>()

但是,我试图避免这种情况,因为BaseABaseB的多个实现,并且不希望必须为每个实现执行其他绑定。我想做的是

Bind<IInterface<Any(BaseA), Any(BaseB>>().To<InterfaceImplementation<ThatSame(A), ThatSame(B)>>();

有什么办法吗?

1 个答案:

答案 0 :(得分:1)

指定open generics在.NET中的工作方式始终相同:

kernel.Bind(typeof(IInterface<,>)).To(typeof(InterfaceImplementation<,>));

将绑定它,以便任何接口关闭类型将用于实现。逗号可以用作分隔符来指定打开的通用参数的数量。