Ninject 2.0 Constructor参数 - 如何设置默认构造函数何时出现?

Stu*_*art 15 c# constructor dependency-injection ninject ioc-container

我是IOC容器的新手并且学习Ninject.我使用的是从Github新下载的2.0版本.

我正在尝试在默认构造函数也存在时在构造函数上设置字符串参数.我一直在逐步完成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);
        }
Run Code Online (Sandbox Code Playgroud)

代码在控制台上打印"错误信息:(".如果我删除了TestClass中的默认构造函数,我会得到"Hello World!".我在这里缺少什么?

澄清:我希望班级打印"Hello World!" 到存在默认构造函数的控制台.

Ian*_*vis 8

string不可自绑定,因此不会将其视为依赖项.当.ctor记分器运行时,它将对默认.ctor和字符串.ctor进行评分,因为无法解析依赖关系.你可以通过归因你的字符串.ctor来解决这个问题

[Inject] 
public TestClass(string message){...}
Run Code Online (Sandbox Code Playgroud)

并且您的代码将正常工作.