나는 종종 복합 패턴을 구현해야한다는 것을 알았다. 예 :자동 합성 패턴
interface IService { ... }
class Service1 : IService { ... }
class Service2 : IService { ... }
class CompositeService : IService
{
public CompositeService(IEnumerable<IService> services) { ... }
...
}
컨테이너에 IService로 CompositeService를 등록하고 종속성을 주입하려고합니다.
는 (장식 다소 비슷하지만 서비스 대신 하나의 세트 장식)
autofac에서 할 수있는 가장 좋은 방법은 무엇입니까?
이상적인 솔루션은 (C#의 경우) 어떻게 생겼습니까?
업데이트 :
나의 현재 등록은 다음과 같습니다
builder.RegisterType<Service1>().Named<IService>("impl");
builder.RegisterType<Service2>().Named<IService>("impl");
builder.Register(c => new CompositeService(c.Resolve<IEnumerable<IService>>("impl")))
.As<IService>();
그것은 http://nblumhardt.com/2011/01/decorator-support-in-autofac-2-4
에 손에 의해 장식과 유사 그것이 개선 할 수 있습니까?
또한 간단한 경우에 더 간단한 버전을 제안합니다 : 'builder.RegisterCompositeType ("impl")'. 의존성을 이미 주입 할 수 있기 때문에 나는 생성자를 수동으로 호출하는 것을 좋아하지 않는다. –
@ Constantin Spirin : 나는 그 오버로드를 가하는 것을 고려해 왔지만 내 대답에서 어떤 일이 벌어지고 있는지에 대해 명시하고 싶었다. 필자가 변경하는 유일한 방법은 여전히 WithElementsNamed (및 WithElementsKeyed) 메서드를 사용하므로 다양한 등록 유형에 대해 'RegisterComposite'오버로드를 만들 필요가 없다는 것입니다. 다른 등록 메소드는 명명 된/키 유형에 대해 수행됩니다). –