我开始使用Autofac,我似乎找不到这个问题的答案。
另外,我什么时候应该调用ContainerBuilder.Build()?
我调用ContainerBuilder.Build()之后是否可以注册另一个类型或实例?
答案 0 :(得分:5)
我无法告诉你Build方法是否昂贵,但是如果你遵循Register Resolve Release pattern则没关系,因为你应该只有一个容器实例按申请。
您需要调用Build方法一次来获取容器实例,因此无论它有多贵(或者不是),这是您必须支付的费用 。但是,当您仅使用容器的单个实例时,仅支付该费用。
答案 1 :(得分:4)
如果您需要将其他组件注册到现有容器中,则可以。要在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重载。
希望有所帮助:)