我正在使用Ninject模块将不同类型绑定到其对应的接口。

注入将在类的构造函数中进行。问题在于该类具有另一个带有包括Func在内的签名的构造函数。

Ninject感到困惑,并把这个扔给我:

使用ClassTest的隐式自绑定激活ClassTest时出错。几个构造函数具有相同的优先级。请使用ToConstructor语法指定构造函数,或添加一个Inject属性。

参见下文,如何进行绑定以及如何进行注入:

this.Bind<InterfaceA>().To<ClassA>();
...

public class ClassTest
{
    public ClassTest(InterfaceA a)
    {
    }

    public ClassTest(Func<ClassB> funcB)
    {
    }
}

...
var giveMeTest = kernel.Get<ClassTest>(); // exception thrown
}

看来Func是罪魁祸首,请您解释一下Ninject为什么感到困惑?

谢谢

最佳答案

最好删除所有未使用的构造函数。没有理由添加从未使用过的构造函数。如果您确实需要多个构造函数,则必须告诉Ninject选择哪个构造函数,例如:

Bind<ClassTest>().ToConstructor(x => new ClassTest(x.Inject<InterfaceA>())).Named("A");
Bind<ClassTest>().ToConstructor(x => new ClassTest(x.Inject<Func<ClassB>>())).Named("B");

kernel.Get<ClassTest>("A");
kernel.Get<ClassTest>("B");

08-03 21:50