2012-02-24 10 views
2

Ninjectモジュールを使用して、異なるタイプを対応するインタフェースにバインドしています。NinjectでFuncを使用したコンストラクタの挿入

注入はクラスのコンストラクタ内で行われます。問題は、クラスにFuncを含む署名付きの別のコンストラクタがあることです。

Ninjectは混乱していると私にこれをスローします:暗黙の自己結合ClassTestはのを使用してClassTestはを活性化

エラー。いくつかのコンストラクタには同じ優先順位があります。 ToConstructor構文を使用してコンストラクタを指定するか、Inject属性を追加してください。

結合がどのように行われるかを下回るとどのように私は、注射を行うを参照してください。

this.Bind<InterfaceA>().To<ClassA>(); 
... 

public class ClassTest 
{ 
    public ClassTest(InterfaceA a) 
    { 
    } 

    public ClassTest(Func<ClassB> funcB) 
    { 
    } 
} 

... 
var giveMeTest = kernel.Get<ClassTest>(); // exception thrown 
} 

funcがここに犯人であると思わNinjectが混乱し、なぜ、あなたは私を説明してくださいできますか?

ありがとうございました

答えて

8

未使用のコンストラクタをすべて削除してください。一度も使用されていないコンストラクタを追加する理由はありません。複数のコンストラクタが本当に必要な場合は、どれを選択するかをNinjectに伝える必要があります(例:

Bind<ClassTest>().ToConstructor(x => new ClassTest(x.Inject<InterfaceA>())).Named("A"); 
Bind<ClassTest>().ToConstructor(x => new ClassTest(x.Inject<Func<ClassB>>())).Named("B"); 

kernel.Get<ClassTest>("A"); 
kernel.Get<ClassTest>("B"); 
関連する問題