2009-09-28 4 views
15

私はIOCコンテナと学習の新人です。私は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」を取得私は何ここで行方不明

を明確にする:?。私はデフォルトのコンストラクタが存在してコンソールに「!Hello Worldのを」印刷するクラスをしたい

答えて

8

文字列は、自己バインド可能ではないので、それが依存性としてカウントされません.ctor scorerが実行されると、デフォルトの.ctorと文字列がスコアされます依存関係が解決できないので同じ。これを修正するには、文字列の属性を変更してください。

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

あなたのコードは正常に動作します。

+0

ありがとうIan! – Stuart

+0

今日私は、この問題を[Inject]属性なしで処理していたはずのパッチをコミットしました。使用する.ctorを評価するときにパラメータのスコアが付けられるようになりました。 –

関連する問題