是否可以在运行时注册服务,即在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.
}