Autofac注入IEnumerable<IInterface>是否自动返回所有接口实现类实例?
Autofac 自动注入接口实现集合特性说明
这是Autofac官方正式支持的稳定核心特性,不属于未文档化的临时功能,完全不用担心后续版本兼容问题,可以放心在生产环境使用。
特性基本逻辑
你观察到的注入行为对应Autofac的*集合解析(Collection Resolution)*能力:
- 只要构造函数参数声明为
IEnumerable<T>、IList<T>、ICollection<T>、T[]这类泛型集合类型,Autofac会自动把容器中所有已注册的T类型服务实例填充到集合中完成注入。 - 这里需要纠正一个误解:Autofac不会无前提自动遍历整个应用域加载的程序集找接口实现。你项目中的
AInterface、BInterface、CInterface肯定已经通过RegisterAssemblyTypes这类批量注册API注册到了Autofac容器中,才会被识别注入,你可以检索项目中的Autofac服务注册代码,大概率能找到类似builder.RegisterAssemblyTypes(某程序集实例).As<IInterface>()的批量注册逻辑。
特性稳定性说明
集合解析是Autofac从早期版本就推出的基础功能,属于官方公开的标准能力,后续版本迭代会保持该功能的向后兼容,不会出现无预警的行为变更。
你还可以基于该特性扩展实现实例顺序控制、按条件筛选注入等需求,相关扩展也都属于官方正式支持的范畴。
内容的提问来源于stack exchange,提问作者Graviton
相关产品推荐
相关产品推荐

