gpt4 book ai didi

c# - Ninject:无法将通用接口(interface)注册到许多其他接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:18 24 4
gpt4 key购买 nike

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

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

但是我得到一个错误:给定的通用参数的数量不等于通用类型定义参数的数量当我尝试注入(inject)例如IConcreteSE_A 到我的 web api Controller 。

如何解决?

最佳答案

这是因为IConcreteSE_A之间没有隐式引用转换和 ISE<SomeClass_A> .换句话说,不能保证 SE<SomeClass_A> , 它实现了 ISE<SomeClass_A> , 实际上满足 IConcreteSE_A 的实现.

您可以通过创建一个实现这两个接口(interface)的具体类然后绑定(bind)到它来解决这个问题。

public class SE<T> : ISE<T> { }
public class SomeClassA { }
public class ConcreteSE_A : ISE<SomeClass_A>, IConcreteSE_A { }

public interface IConcreteSE_A : ISE<SomeClass_A> { }

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

关于c# - Ninject:无法将通用接口(interface)注册到许多其他接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45869969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com