18

私は Autofac (3) を初めて使用し、それを使用して IRecognizer を実装するいくつかのアセンブリ内のいくつかのクラスを見つけています。

ので、私は持っています:

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

これは問題ありません。

しかし、見つかったコンポーネントへの参照をコンストラクターに挿入したいと思います-一種の:

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

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

4

1 に答える 1

29

Autofac は、関係タイプIEnumerable<T>として をサポートしています。

たとえば、Autofac が型のコンストラクター パラメーターを注入している場合、 IEnumerable<ITask>それは を提供するコンポーネントを探しません IEnumerable<ITask>。代わりに、コンテナはすべての実装を見つけてITask注入します。

したがって、コンストラクターを次のように変更します。

public Detector(IEnumerable<IRecognizer> recognizers)
{
    this.Recognizers = new List<IRecognizer>(recognizers);
}
于 2013-03-11T19:24:26.890 に答える