[ioc-container] 컨테이너가 빌드 된 후 서비스 추가

런타임에 서비스를 등록 할 수 있습니까? 즉, 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.
}

수명 범위 작업


답변