让我们说这个场景:
public class B {};
public class C
{
public C(B b){}
}
Run Code Online (Sandbox Code Playgroud)
要从Autofac容器中解析C,我必须将B和C都注册到容器.但是,今天我使用Unity,似乎我只需要将B注册到容器,然后就可以解析C.
那么Autofac不能像Unity那样做吗?
Pet*_*old 21
使用开箱即用的Autofac,可以预期您要使用的每种类型都可以直接使用Register...方法注册容器,也可以批量使用RegisterAssemblyTypes.但也有其他选择,看看尼古拉斯关于解决所有问题的文章.所以,是的,Autofac可以做Unity所做的事情,但你必须启用它.
更新:实际上,"解决任何问题"功能现已内置,您可以执行以下操作:
var cb = new ContainerBuilder();
cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
return cb.Build();
Run Code Online (Sandbox Code Playgroud)
随着AnyConcreteTypeNotAlreadyRegisteredSource你其实可以同时解决C并B没有注册任何人.
请注意,解析的服务的生命周期AnyConcreteTypeNotAlreadyRegisteredSource将是"每个依赖范围".
注意: Autofac讨论组中的此主题是相关的.
| 归档时间: |
|
| 查看次数: |
3600 次 |
| 最近记录: |