2009-09-28 66 views
15

我是新来的国际奥委会容器和学习Ninject。我已经使用从Github刚刚下载的2.0版本。Ninject 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); 
     } 

代码打印出“错误消息:(”到控制台如果我删除在TestClass中默认的构造函数,我得到我是什么在这里失踪

为了澄清:我希望类打印!“Hello World”的与本默认构造函数控制台

回答

8

字符串不是自我绑定,所以它不能算作依赖当.ctor记分器运行时,它将得到默认的.ctor和字符串。因为依赖关系无法解析,所以.ctor相同。您可以通过归因于您的字符串来解决此问题。您可以通过归因于您的字符串来解决此问题。您的代码将正常工作。

+0

非常感谢伊恩! – Stuart 2009-10-04 19:43:36

+0

我刚刚在今天早些时候提交了一个补丁,该补丁应该在没有[Inject]属性的情况下处理此问题。评估使用哪个.ctor时,现在评分参数。 – 2009-10-05 22:27:25