【问题标题】:Adding services after container has been built构建容器后添加服务
【发布时间】:2011-06-27 07:10:45
【问题描述】:

是否可以在运行时注册服务,即在 ContainerBuilder 已构建并 Container 已创建(并且 ContainerBuilder 已处置)之后?

【问题讨论】:

标签: ioc-container autofac


【解决方案1】:

是的,你可以,在ContainerBuilder 上使用Update 方法:

var newBuilder = new ContainerBuilder();
newBuilder.Register...;

newBuilder.Update(existingContainer);

【讨论】:

  • 请注意,更新已用于解析的现有容器可能会导致不确定的行为。例如,替换已解析单例的依赖项的组件会导致原始组件保持引用。
  • 是的,它已经过时了,我来这里是为了寻找替代选项
【解决方案2】:

由于 ContainerBuilder.Update 已被弃用,新的​​建议是使用子生命周期范围。

将注册添加到生命周期范围

Autofac 允许您在创建生命周期范围时“即时”添加注册。当您需要进行某种“点焊”受限注册覆盖时,或者如果您通常只需要在您不想全局注册的范围内添加一些额外的东西,这可以为您提供帮助。您可以通过将 lambda 传递给 BeginLifetimeScope() 来实现此目的,BeginLifetimeScope() 接受 ContainerBuilder 并添加注册。

using(var scope = container.BeginLifetimeScope(
  builder =>
  {
    builder.RegisterType<Override>().As<IService>();
    builder.RegisterModule<MyModule>();
  }))
{
  // The additional registrations will be available
  // only in this lifetime scope.
}

Working with Lifetime Scopes

【讨论】:

  • 需要注意的是 using 块中的注释。 “其他注册将仅在此生命周期范围内可用。”
猜你喜欢
  • 2018-05-28
  • 2016-02-20
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多