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

时间:2010-08-05 10:06:16

标签: autofac

让我们说这个场景:

public class B {};

public class C
{
     public C(B b){}
}

要从Autofac容器中解析C,我必须将B和C都注册到容器中。 但是,今天我使用Unity,似乎我只需要将B注册到容器,然后就可以解析C.

Autofac不能像Unity那样做吗?

1 个答案:

答案 0 :(得分:21)

使用开箱即用的Autofac,您可以使用Register...方法直接使用RegisterAssemblyTypes批量注册您要使用的每种类型。但是还有其他选择,请看Nicholas article about resolving everything。所以,是的,Autofac可以做Unity所做的事情,但你必须启用它。

更新:实际上,“解决任何问题”功能现已内置,您可以执行以下操作:

        var cb = new ContainerBuilder();
        cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
        return cb.Build();

使用AnyConcreteTypeNotAlreadyRegisteredSource,您可以实际解析CB,而无需注册其中任何一个。

请注意,AnyConcreteTypeNotAlreadyRegisteredSource解析的服务的生命周期为"per dependency scope"

注意: this topic与Autofac讨论组有关。

相关问题