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.
我继承了一个相当大的代码库,大量使用了 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 suppliesIEnumerable<ITask>
. Instead, the container will find all implementations ofITask
and inject all of them.