为什么ninject的构造函数的分数构造函数具有无法解析的params?

时间:2017-07-11 15:55:17

标签: ninject

给出一些简单的类和接口......

public interface IClass1 { }; public class Class1 : IClass1 { }
public interface IClass2 { }; public class Class2 : IClass2 { }

......这个可注射的代码......

public class Class3
{
    public Class3(IClass1 class1, IClass2 class2)
    {
    }
    public Class3(IClass1 class1)
    {
    }
}

...而且这个设置......

    static void Main(string[] args)
    {
        var kernel = new StandardKernel();
        kernel.Bind<IClass1>().To<Class1>();

        var instance = kernel.Get<IClass1>();
    }

Ninject将崩溃,声明它无法找到IClass2的绑定。

在这一点上,这是可以理解的,因为它没有IClass2的绑定。

但它确实可以访问不需要这种绑定的构造函数。

经过一番调查,我们发现这两个构造函数都具有相同的分数&#39;因为它们都具有相同数量的可解析参数。

Ninject似乎将它们视为同等有效。它选择需要IClass2参数的构造函数,因为它在代码中首先列出。

因此,如果我颠倒这些构造函数的顺序......

public class Class3
{
    public Class3(IClass1 class1)
    {
    }
    public Class3(IClass1 class1, IClass2 class2)
    {
    }
}

......一切正常。

因此,我的问题是......

为什么构造函数(需要IClass2参数的构造函数)在具有无法解析的参数时才被视为有效的竞争者?

0 个答案:

没有答案