是否可以使用Autofac将已解析对象的列表注入构造函数?

n4c*_*500 16 collections code-injection autofac c#-4.0

我是Autofac(3)的新手,并且正在使用它在几个实现IRecognizer的程序集中查找许多类.

所以我有:

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).As<IRecognizer>();
Run Code Online (Sandbox Code Playgroud)

这很好.

但是我想将找到的组件的引用注入到构造函数中 - 有点像:

public Detector(List<IRecognizer> recognizers)
{
    this.Recognizers = recognizers;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

nem*_*esv 23

Autofac支持IEnumerable<T>作为关系类型:

例如,当Autofac注入类型的构造函数参数时 IEnumerable<ITask>,它将不会查找提供的组件 IEnumerable<ITask>.相反,容器将找到所有实现ITask并注入所有实现.

所以将构造函数更改为:

public Detector(IEnumerable<IRecognizer> recognizers)
{
    this.Recognizers = new List<IRecognizer>(recognizers);
}
Run Code Online (Sandbox Code Playgroud)