在构建容器之后添加服务

时间:2011-02-15 00:29:40

标签: ioc-container autofac

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

2 个答案:

答案 0 :(得分:93)

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

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

newBuilder.Update(existingContainer);

答案 1 :(得分:6)

由于不推荐使用ContainerBuilder.Update,新建议是使用子生存期范围。

将注册添加到终身范围

Autofac允许您在创建生命周期范围时“动态”添加注册。当您需要执行某种“点焊”限制注册覆盖时,或者如果您通常只需要一些您不想在全局注册的范围内的其他内容时,这可以帮助您。你可以通过将lambda传递给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