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 回答