C# 具有相同关闭类型的开放泛型实现的Ninject bind开放泛型接口

C# 具有相同关闭类型的开放泛型实现的Ninject bind开放泛型接口,c#,generics,dependency-injection,ninject,C#,Generics,Dependency Injection,Ninject,我一直在阅读其他问题和答案,但我不太明白我的解决方案的答案 我有以下情况: class BaseA {} class BaseB {} IInterface<TClassA, TClassB> where TClassA : BaseA where TClassB : BaseB IterfaceImplementation<TClassA, TClassB> :IInterface<TClassA, TClassB> whe

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

我有以下情况:

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 {}
有什么方法可以做到这一点吗?

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

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

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

OK,这意味着任何接口都可以绑定到InterfaceImplementation,如果有人试图绑定到非从BaseA和BaseB派生的类,编译器应该捕获接口泛型类型的约束,正确吗?它将注册所有实现。当您将
IInterface
指定为构造函数参数时,仅当存在注册为
InterfaceImplementation
的实现时,才会解析。因此,如果您决定为
IInterface
添加特定实现,对于instacce
MyImplementation:IInterface
,是否可以使用Instance的静态泛型将其绑定到该特定实现
(Re)bind是的,除了此注册之外,您还可以进行其他注册,但如果您采用这种方式,则需要为每种类型添加一个注册。或者,您可以使用一些来查找和注册它们。非常感谢!我的目标是有一个基类来实现每个派生类的逻辑,如果实现想要偏离基类逻辑,那么就需要一个额外的绑定,在这种情况下,我需要一个特定的绑定。仍然感谢您的建议,我们将更多地研究开放泛型及其绑定和反射绑定。
 InterfaceImplementation<A,B>
 kernel.Bind<IInterface<A,B>>().To<InterfaceImplementation<A,B>>()
Bind<IInterface<Any(BaseA), Any(BaseB>>().To<InterfaceImplementation<ThatSame(A), ThatSame(B)>>();
kernel.Bind(typeof(IInterface<,>)).To(typeof(InterfaceImplementation<,>));