【发布时间】:2011-06-27 07:10:45
【问题描述】:
是否可以在运行时注册服务,即在 ContainerBuilder 已构建并 Container 已创建(并且 ContainerBuilder 已处置)之后?
【问题讨论】:
-
目前,最佳实践是 AutoFac 容器 are immutable
标签: ioc-container autofac
是否可以在运行时注册服务,即在 ContainerBuilder 已构建并 Container 已创建(并且 ContainerBuilder 已处置)之后?
【问题讨论】:
标签: ioc-container autofac
是的,你可以,在ContainerBuilder 上使用Update 方法:
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
【讨论】:
由于 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.
}
【讨论】: