在autofac容器可以解决之前必须注册每个类吗?

Ben*_*nny 12 autofac

让我们说这个场景:

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你其实可以同时解决CB没有注册任何人.

请注意,解析的服务的生命周期AnyConcreteTypeNotAlreadyRegisteredSource将是"每个依赖范围".

注意: Autofac讨论组中的此主题是相关的.