Ninject:无法将通用接口注册到许多其他接口

时间:2017-08-24 19:59:31

标签: c# generics ninject

我正在尝试在Ninject中注册一个通用接口,然后我想要那个通用接口的其他接口:

public interface ISE<T> { }

public class SE<T> : ISE<T> { }

public interface IConcreteSE_A : ISE<SomeClass_A> { }
public interface IConcreteSE_B : ISE<SomeClass_B> { }
public interface IConcreteSE_C : ISE<SomeClass_C> { }


kernel.Bind(typeof(ISE<>)).To(typeof(SE<>));
kernel.Bind<IConcreteSE_A>().To(typeof(SE<>));
kernel.Bind<IConcreteSE_B>().To(typeof(SE<>));
kernel.Bind<IConcreteSE_C>().To(typeof(SE<>));

但是我得到一个错误:当我尝试注入时,给出的通用参数的数量不等于通用类型定义参数的数量 IConcreteSE_A到我的网络API控制器。

如何解决?

1 个答案:

答案 0 :(得分:1)

这是因为IConcreteSE_AISE<SomeClass_A>之间没有隐式引用转换。换句话说,无法保证实现SE<SomeClass_A>的{​​{1}}实际上满足ISE<SomeClass_A>的实现。

您可以通过创建一个实现两个接口然后绑定到该接口的具体类来解决此问题。

IConcreteSE_A
相关问题