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>>()
但是,由于 BaseA
和 BaseB
的多个实现,我试图避免这种情况,并且不想为每个实现做额外的绑定。我想做的是
Bind<IInterface<Any(BaseA), Any(BaseB>>().To<InterfaceImplementation<ThatSame(A), ThatSame(B)>>();
有什么办法吗?
指定 open generics 在 .NET 中始终以相同的方式工作:
kernel.Bind(typeof(IInterface<,>)).To(typeof(InterfaceImplementation<,>));
这将绑定它,因此任何接口关闭类型都将用于实现。逗号可以作为分隔符指定开放泛型参数的个数。
我一直在阅读其他问题和答案,但我不太明白我的解决方案的答案。
我有以下场景:
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)>>();
有什么办法吗?
指定 open generics 在 .NET 中始终以相同的方式工作:
kernel.Bind(typeof(IInterface<,>)).To(typeof(InterfaceImplementation<,>));
这将绑定它,因此任何接口关闭类型都将用于实现。逗号可以作为分隔符指定开放泛型参数的个数。