是否可以在运行时注册服务,即在ContainerBuilder构建服务和Container创建(并ContainerBuilder处置)服务之后?
Answers:
是的,可以使用以下Update方法ContainerBuilder:
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
由于不推荐使用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.
}