Ninject 将开放通用接口与具有相同关闭类型的开放通用实现绑定

Ninject bind open generic interface with open generic implementation having the same closing types

我一直在阅读其他问题和答案,但我不太明白我的解决方案的答案。

我有以下场景:

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

有什么办法吗?

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

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

这将绑定它,因此任何接口关闭类型都将用于实现。逗号可以作为分隔符指定开放泛型参数的个数。