Autofac ContainerBuilder.Build是一项昂贵的操作吗?

时间:2010-12-20 15:39:30

标签: c# dependency-injection autofac

我开始使用Autofac,我似乎找不到这个问题的答案。

另外,我什么时候应该调用ContainerBuilder.Build()?

我调用ContainerBuilder.Build()之后是否可以注册另一个类型或实例?

4 个答案:

答案 0 :(得分:5)

我无法告诉你Build方法是否昂贵,但是如果你遵循Register Resolve Release pattern则没关系,因为你应该只有一个容器实例按申请。

您需要调用Build方法一次来获取容器实例,因此无论它有多贵(或者不是),这是您必须支付的费用 。但是,当您仅使用容器的单个实例时,仅支付该费用

答案 1 :(得分:4)

在实际开始调用业务行为之前,通常应在应用程序启动期间调用ContainerBuilder.Build()。

如果您需要将其他组件注册到现有容器中,则可以。要在Autofac v2.2(或更高版本)中执行此操作,您可以创建另一个ContainerBuilder实例并使用ContainerBuilder.Build(IContainer)重载方法。

答案 2 :(得分:3)

ContainerBuilder _AutoFacContainerBuilder;
IContainer _AutoFacContainer;

_AutoFacContainerBuilder.RegisterType<MyClass>().Named<IMyClass>("MyNameOne");
_AutoFacContainer = AutoFacContainerBuilder.Build();


ContainerBuilder _AnotherBuilder;

_AnotherBuilder.RegisterType<MyClassTwo>().Named<IMyClassTwo>("MyNameTwo");
_AnotherBuilder.Update(_AutoFacContainer);

答案 3 :(得分:1)

在我的网络应用程序中,我使用了一个基础HttpApplication类,它在Application_Start事件上调用Build。 然后,我使用Modules(放置在需要注册的每个程序集上),assembly "scanner"MVC integration的混合。

如果以后注册,您可以使用MEF integration,或者如Jonathan所述,使用Build重载。

希望有所帮助:)