Autofac : 유형의 모든 인스턴스 해결
다음 등록을 감안할 때
builder.Register<A>().As<I>();
builder.Register<B>().As<I>();
builder.Register<C>().As<I>();
var container = builder.Build();
유형 I의 모든 인스턴스를 IEnumerable
(배열 또는 컬렉션은 중요하지 않음) 으로 해결하려고합니다 .
윈저에서는 다음과 같이 썼을 것입니다.
foreach(I i in container.ResolveAll<I>())
{
...
}
Windsor에서 Autofac 1.4.4.561로 마이그레이션 중이지만 동등한 구문을 볼 수 없습니다.
Autofac의 현재 버전 : (2.0 이상이므로 오늘 사용해야하는 모든 항목)
여러 등록 ILoggers
(예 :) :
var builder = new ContainerBuilder();
builder.Register<ConsoleLogger>()
.As<ILogger>();
builder.Register<EmailLogger>()
.As<ILogger>()
.PreserveExistingDefaults(); //keeps console logger as the default
그런 다음 모든를 가져옵니다 ILogger
.
var loggers = container.Resolve<IEnumerable<ILogger>>();
특별한 조치를 취할 필요는 없으며 IEnumerable<T>
원하는 유형을 요청하십시오. Autofac은 추가 기능으로 구성 요소를 래핑 할 수 있는 다른 어댑터 와 함께 즉시 컬렉션을 지원 합니다.
이것은 2.x 이전의 ImplicitCollectionSupportModule과 동일한 사용법이지만 바로 구워졌습니다.
이전 버전 (0.X-1.4)
두 가지 방법:
1) 컬렉션 등록 사용
var builder = new ContainerBuilder();
builder.RegisterCollection<ILogger>()
.As<IEnumerable<ILogger>>();
builder.Register<ConsoleLogger>()
.As<ILogger>()
.MemberOf<IEnumerable<ILogger>>();
builder.Register<EmailLogger>()
.As<ILogger>()
.MemberOf<IEnumerable<ILogger>>();
그때:
var loggers = container.Resolve<IEnumerable<ILogger>>();
IEnumerable을 제공합니다.
또는 2) ImplicitCollectionSupport 모듈을 사용하여 코드가 최신 버전의 Autofac처럼 작동하도록 할 수 있습니다.
builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.Register(component1).As<ILogger>;
builder.Register(component2).As<ILogger>;
그런 다음 모든 문제를 해결하는 대신 ILogger 컬렉션을 해결합니다.
var loggers = container.Resolve<IEnumerable<ILogger>>();
다시 IEnumerable을 제공합니다.
새 (2.x) 버전을위한 업데이트입니다. 지금 필요한 것은 다음과 같습니다.
container.Resolve<IEnumerable<I>>();
더 이상 RegisterCollection()
또는 ImplicitCollectionSupportModule
이 기능이 필요하지 않습니다 .
참고 URL : https://stackoverflow.com/questions/1406148/autofac-resolve-all-instances-of-a-type
'Programing' 카테고리의 다른 글
DNS 문제, nslookup 작동, ping 작동 안 함 (0) | 2020.11.27 |
---|---|
C 개발을위한 최고의 IDE는 무엇입니까? / IDE 대신 Emacs를 사용하는 이유는 무엇입니까? (0) | 2020.11.27 |
명령 줄에서 Zend Framework 작업 실행 (0) | 2020.11.27 |
ActiveRecord 오브젝트에서 속성 유형 가져 오기 (0) | 2020.11.27 |
document.body.scrollTop은 스크롤 할 때도 IE에서 항상 0입니다. (0) | 2020.11.27 |