12

假设这种情况:

public class B {};

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

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

所以 Autofac 不能像 Unity 那样做?

4

1 回答 1

21

使用开箱即用的 Autofac,预计您要使用的每种类型都在容器中注册,直接使用Register...方法或批量使用RegisterAssemblyTypes. 但也有其他选择,请查看Nicholas 关于解决所有问题的文章。所以是的,Autofac 可以做 Unity 所做的事情,但您必须启用它。

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

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

使用 ,AnyConcreteTypeNotAlreadyRegisteredSource您实际上可以解决这两个问题C,而B无需注册其中任何一个。

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

注意: Autofac 讨论组中的这个主题是相关的。

于 2010-08-05T11:16:22.067 回答