在 ContainerBuilder
构建完成并创建了 Container
(ContainerBuilder
已处理)之后,是否可能在运行时注册服务?
在 ContainerBuilder
构建完成并创建了 Container
(ContainerBuilder
已处理)之后,是否可能在运行时注册服务?
ContainerBuilder
上的Update
方法即可:var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
由于ContainerBuilder.Update已经被弃用,新的建议是使用子生命周期范围。
向生命周期范围添加注册信息
Autofac允许您在创建生命周期范围时“即时”添加注册信息。当您需要进行一种“点焊”有限注册覆盖或者通常需要在范围中添加一些不想全局注册的附加内容时,这将非常有帮助。您可以通过向BeginLifetimeScope()传递一个lambda表达式来实现这一点,该表达式接受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.
}