Autofac:IEnumerable<IInterface> 总是 return 一个从 IInterface 派生的对象列表?

Autofac: IEnumerable<IInterface> will always return a list of objects derive from IInterface?

我继承了一个相当大的代码库,大量使用了 Autofac。我发现了一些有趣甚至有点令人费解的东西。

我有一个class这样的

public class ClassA
{  
   public ClassA(IEnumerable<IInterface> allObjects)
   {
   }
}

在我的项目中,我有一些 class 实现了 IInterface,例如

public class AInterface:IInterface {};
public class BInterface:IInterface {};
public class CInterface:IInterface {};

有趣的是,如果我让Autofac实例化ClassA,那么对于allObjects参数,Autofac会给我List<IInterface>(){AInterface, BInterface, CInterface}

似乎 Autofac 正在遍历应用程序域中加载的程序集中的所有类型,并自动实例化从 [=14= 继承的 classes ].

这是记录在案的行为吗?如果是,哪里?虽然这完全符合我的预期,但我仍然想确保它有文档记录并得到官方支持,这样我就不会依赖于无文档记录(因此会发生变化)的行为,这些行为只是因为偶然而有效。

此行为记录在 Implicit Relationship Types

For example, when Autofac is injecting a constructor parameter of type IEnumerable<ITask> it will not look for a component that supplies IEnumerable<ITask>. Instead, the container will find all implementations of ITask and inject all of them.