簡體   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