让我们说这个场景:
public class B {};
public class C
{
public C(B b){}
}
要从Autofac容器中解析C,我必须将B和C都注册到容器中。 但是,今天我使用Unity,似乎我只需要将B注册到容器,然后就可以解析C.
Autofac不能像Unity那样做吗?
答案 0 :(得分:21)
使用开箱即用的Autofac,您可以使用Register...
方法直接使用RegisterAssemblyTypes
批量注册您要使用的每种类型。但是还有其他选择,请看Nicholas article about resolving everything。所以,是的,Autofac可以做Unity所做的事情,但你必须启用它。
更新:实际上,“解决任何问题”功能现已内置,您可以执行以下操作:
var cb = new ContainerBuilder();
cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
return cb.Build();
使用AnyConcreteTypeNotAlreadyRegisteredSource
,您可以实际解析C
和B
,而无需注册其中任何一个。
请注意,AnyConcreteTypeNotAlreadyRegisteredSource
解析的服务的生命周期为"per dependency scope"。
注意: this topic与Autofac讨论组有关。