2013-03-11 5 views
7

私はAutofac(3)を初めて使い、IRecognizerを実装しているいくつかのアセンブリでいくつかのクラスを見つけるのに使っています。Autofacを使用して、解決されたオブジェクトのリストをコンストラクタに挿入することはできますか?

だから私は持っている:罰金です

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).As<IRecognizer>(); 

しかし、私は、コンストラクタの中に見つかったコンポーネントへの参照を注入したいのですが - の並べ替え:

public Detector(List<IRecognizer> recognizers) 
{ 
    this.Recognizers = recognizers; 
} 

はこれを行う方法はありますか?

答えて

13

AutofacはAutofacがタイプ IEnumerable<ITask>のコンストラクタパラメータを注入されたとき、それは IEnumerable<ITask>を提供するコンポーネントを探していないだろう、例えばrelationship type:

としてIEnumerable<T>をサポートしています。代わりに、コンテナは の実装がすべてITaskであり、すべてを注入することになります。

だからあなたのコンストラクタは、に変更します。

public Detector(IEnumerable<IRecognizer> recognizers) 
{ 
    this.Recognizers = new List<IRecognizer>(recognizers); 
} 
+1

パーフェクト、ありがとうございました。 – n4cer500

関連する問題