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

rgu*_*iro 8 c# dependency-injection autofac

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

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

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

Mar*_*ann 5

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

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

  • 马克,你不应该认为我的问题无关紧要,因为你不知道我手中有什么问题.如果我问这些问题是因为它们与我有关.Register-Resolve-Release模式可以应用于大多数情况,但不适用于我的情况. (3认同)

Jon*_*ver 4

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

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

  • 我相信`ContainerBuilder.Build(IContainer)`方法仅存在于Autofac v1中。在 Autofac v2 中,这一点已被删除。从 v2.2 开始,您可以使用新的 `ContainerBuilder.Upate(IContainer)` 方法再次更改容器。 (5认同)