2014-12-15 3 views
4

Autofac에서 인터페이스의 모든 구현을 등록 해제 할 수 있습니까?Autofac이 인터페이스의 모든 구현을 등록 해제합니다.

내 시나리오 :

나는 두 개의 모듈, 하나 DefaultModule 몇 가지 조건이 충족 될 경우 나중에 SpecificModule를 등록합니다.

builder.RegisterModule(new DefaultModule()); 

if (someCondition) 
{ 
    builder.RegisterModule(new SpecificModule()); 
} 

두 모듈은 인터페이스의 여러 명명 된 인스턴스를 등록합니다. SpecificModule에서로드 기능 내부

builder.RegisterType<DefaultSomething1>().Named<ISomething>("DefaultSomething1").SingleInstance(); 
builder.RegisterType<DefaultSomething2>().Named<ISomething>("DefaultSomething2").SingleInstance(); 

: DefaultModule에서로드 기능 내부

내가 ISomething의 모든 이전 등록의 등록을 취소 할 SpecificModule을 등록 할 때

builder.RegisterType<SpecificSomething1>().Named<ISomething>("SpecificSomething1").SingleInstance(); 
builder.RegisterType<SpecificSomething2>().Named<ISomething>("SpecificSomething2").SingleInstance(); 

그들은 주입되기 때문에 다른 생성자로 컬렉션으로.

public SomeClass(IEnumerable<ISomething> somethingCollection) 
{ 
    _somethingCollection = somethingCollection; 
} 

이것은 가능합니까? 아니면 다른 방식으로하는 것이 더 나은가?

답변

관련 문제