런타임에 서비스를 등록 할 수 있습니까? 즉, ContainerBuilder
을 빌드하고 Container
생성 (및 ContainerBuilder
폐기) 한 후를 의미 합니까?
답변
예, 다음 Update
방법을 사용하여 할 수 있습니다 ContainerBuilder
.
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
답변
ContainerBuilder.Update가 더 이상 사용되지 않으므로 새로운 권장 사항은 하위 수명 범위를 사용하는 것입니다.
평생 범위에 등록 추가
Autofac을 사용하면 수명 범위를 만들 때 “즉시”등록을 추가 할 수 있습니다. 이렇게하면 일종의 “스폿 용접”제한 등록 재정의를 수행해야하거나 일반적으로 스코프에서 전역 적으로 등록하지 않으려는 추가 항목이 필요한 경우 도움이 될 수 있습니다. ContainerBuilder를 가져와 등록을 추가하는 BeginLifetimeScope ()에 람다를 전달하면됩니다.
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.
}