컨테이너가 빌드 된 후 서비스 추가


답변:


96

예, 다음 Update방법을 사용하여 할 수 있습니다 ContainerBuilder.

var newBuilder = new ContainerBuilder();
newBuilder.Register...;

newBuilder.Update(existingContainer);

2
해결에 이미 사용 된 기존 컨테이너를 업데이트하면 비 결정적 동작이 발생할 수 있습니다. 예를 들어, 이미 해결 된 싱글 톤의 종속성 인 구성 요소를 교체하면 원래 구성 요소가 참조 된 상태로 유지됩니다.
Steven

13
업데이트는 더 이상 사용되지 않습니다 github.com/autofac/Autofac/issues/811 .
Chase Florell

19

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.
}

수명 범위 작업


주목할 점은 using 블록의 주석입니다. "추가 등록은이 평생 범위에서만 사용할 수 있습니다."
Ady
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.