繁体   English   中英

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

[英]Is Autofac ContainerBuilder.Build an expensive operation?

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

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

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

我不能告诉你Build方法是否昂贵,但是如果你遵循Register Resolve Release模式,那就无所谓了,因为每个应用程序只应该有一个容器实例

您需要调用Build方法一次才能获得容器实例,因此无论它有多贵(或不是), 这都是您必须支付的成本 但是,当您只使用容器的单个实例时,您只需支付一次该费用

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

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

ContainerBuilder _AutoFacContainerBuilder;
IContainer _AutoFacContainer;

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


ContainerBuilder _AnotherBuilder;

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

在我的Web应用程序中,我使用了一个基本的HttpApplication类,它在Application_Start事件上调用Build。 然后我使用混合模块 (放置在需要注册的每个组件上), 组件“扫描器”MVC集成

对于以后的注册,您可以使用,例如, MEF集成 ,或者,如Jonathan所述,使用Build重载。

希望能帮助到你 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM