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

Posted

技术标签:

【中文标题】是否可以使用 Autofac 将已解析对象的列表注入构造函数?【英文标题】:Is it possible to inject a list of resolved objects into a constructor using Autofac? 【发布时间】:2013-02-27 02:12:04 【问题描述】:

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

所以我有:

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

这很好。

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

public Detector(List<IRecognizer> recognizers)

    this.Recognizers = recognizers;

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

Autofac 支持 IEnumerable&lt;T&gt; 作为 relationship type:

例如,当 Autofac 注入类型为的构造函数参数时 IEnumerable&lt;ITask&gt; 它不会寻找提供的组件 IEnumerable&lt;ITask&gt;。相反,容器会找到所有 ITask 的实现并将它们全部注入。

所以将你的构造函数更改为:

public Detector(IEnumerable<IRecognizer> recognizers)

    this.Recognizers = new List<IRecognizer>(recognizers);

【讨论】:

nemesv 我有一个非常相似的问题 - 不认为你能帮忙吗? ***.com/questions/64363768/…

以上是关于是否可以使用 Autofac 将已解析对象的列表注入构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

IoC之AutoFac——解析服务

Autofac系列解析服务

使用 Autofac 和 IHostBuilder 解析服务

依赖注入之Autofac使用总结

Autofac + WCF REST 4.0

根据运行时会话值从 Autofac 解析服务实现