C# Ninject 2.0构造函数参数-当默认构造函数也存在时如何设置?

C# Ninject 2.0构造函数参数-当默认构造函数也存在时如何设置?,c#,dependency-injection,constructor,ioc-container,ninject,C#,Dependency Injection,Constructor,Ioc Container,Ninject,我对IOC容器和Ninject还不熟悉。我使用的是2.0版,刚从Github下载 当默认构造函数也存在时,我试图在构造函数上设置一个字符串参数。我一直在浏览Ninject源代码,但我对用于轻松确定我缺少什么的模式还不够熟悉 这是我的测试控制台应用程序: static void Main(string[] args) { IKernel kernel = new StandardKernel(); kernel.Bind<ITe

我对IOC容器和Ninject还不熟悉。我使用的是2.0版,刚从Github下载

当默认构造函数也存在时,我试图在构造函数上设置一个字符串参数。我一直在浏览Ninject源代码,但我对用于轻松确定我缺少什么的模式还不够熟悉

这是我的测试控制台应用程序:

        static void Main(string[] args)
        {
        IKernel kernel = new StandardKernel();
        kernel.Bind<ITestClass>().To<TestClass>()
            .WithConstructorArgument("message", "Hello World!");

        var testClass = kernel.Get<ITestClass>();

        // Does not work either:
        //var testClass = kernel.Get<ITestClass>(new ConstructorArgument("message", "Hello World!"));

        testClass.DisplayMessage();
        Console.ReadLine();
        }
    }

public interface ITestClass
    {
    void DisplayMessage();
    }

public class TestClass : ITestClass
    {
    public TestClass()
        {
        this.message = "Wrong message :(";
        }

    private string message;
    public TestClass(string message)
        {
        this.message = message;
        }

    public void DisplayMessage()
        {
        Console.WriteLine(this.message);
        }
static void Main(字符串[]args)
{
IKernel kernel=新的标准内核();
kernel.Bind()到()
.WithConstructorArgument(“消息”,“你好,世界!”);
var testClass=kernel.Get();
//也不起作用:
//var testClass=kernel.Get(新的构造函数参数(“message”,“helloworld!”);
testClass.DisplayMessage();
Console.ReadLine();
}
}
公共接口ITestClass
{
void DisplayMessage();
}
公共类TestClass:ITestClass
{
公共测试类()
{
this.message=“错误消息:(”;
}
私有字符串消息;
公共测试类(字符串消息)
{
this.message=消息;
}
public void DisplayMessage()
{
Console.WriteLine(此消息);
}
代码将“错误消息:”()打印到控制台。如果我删除TestClass中的默认构造函数,我会得到“Hello World!”。我在这里缺少什么


澄清一下:我想让班级打印“Hello World!”到存在默认构造函数的控制台。

字符串不可自绑定,因此不作为依赖项计算。当.ctor记分器运行时,它将对默认.ctor和字符串.ctor进行相同的记分,因为无法解析依赖项。您可以通过为字符串.ctor添加属性来解决此问题

[Inject] 
public TestClass(string message){...}

您的代码也可以正常工作。

我今天早些时候刚刚提交了一个补丁,该补丁在没有[Inject]属性的情况下也可以解决这个问题。现在,在评估要使用哪个.ctor时,会对参数进行评分。