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


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

所以我有:

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

这很好。

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

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

有没有办法做到这一点?


10189
2018-03-11 18:59


起源



答案:


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

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

所以将构造函数更改为:

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

15
2018-03-11 19:24



太完美了,非常感谢你。 - n4cer500


答案:


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

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

所以将构造函数更改为:

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

15
2018-03-11 19:24



太完美了,非常感谢你。 - n4cer500