2013-01-24 3 views
1

autofac xml 구성을 사용하여 동일한 인터페이스의 여러 구현을 구성 할 수 있습니까?Autofac 여러 구현 xml 구성

내가 수행하려고하는 것은 여러 작업을 실행하는 Windows 서비스입니다. 나는 sms 또는 전자 우편에 의하여 줄에서 메시지를 보내고있는 2 개의 일이있다. 모든 직업은 다른 집회입니다. 둘 다 IQueuedMessageProvider에 의존합니다. 내가

<component type="MyApp.Plugin.Sms.Verizon.VerizonSmsService, MyApp.Plugin.Sms.Verizon" service="MyApp.Model.Messages.QueuedMessages.Providers.IQueuedMessageProvider, MyApp.Model" /> 
<component type="MyApp.Plugin.Email.Smtp.EmailService, MyApp.Plugin.Email" service="MyApp.Model.Messages.QueuedMessages.Providers.IQueuedMessageProvider, MyApp.Model" /> 
처럼 구현을 등록의 app.config에서

public SendSmsJob(IQueuedMessageProvider queuedMessageProvider) 
    { 
     _queuedMessageProvider= queuedMessageProvider; 
    } 
public SendEmailJob(IQueuedMessageProvider queuedMessageProvider) 
    { 
     _queuedMessageProvider= queuedMessageProvider; 
    } 

: 하나의 작업은 이메일 구현을 다른 (질문에 대한 간체) 모두 작업에 대한 SMS implementation.The 생성자는 다음과 같이 하나 필요

작업이 de IQueuedMessageProvider의 올바른 구현을 얻게하려면 어떻게해야합니까? 나는 이런 종류의 문제를 이름과 열쇠로 해결하는 것에 대해 읽었다. https://code.google.com/p/autofac/wiki/TypedNamedAndKeyedServices.

또 다른 옵션은 모든 구현을 등록하고 IQueuedMessageProvider를 IEnumerable로 만들고 생성자에서 올바른 구현을 수행하는 것입니다. 그러나 나는 자기 자신의 구성에서 그것을 해결하는 것을 선호한다. 이 문제를 해결할 수있는 좋은 방법이 있습니까?

답변

1

이 글을 쓰는 시점에 Autofac의 XML 구성은 서비스 (예 : 메시지 공급자)의 이름/키를 지정할 수 있지만 다른 서비스의 생성자 (" 작업 "클래스)은 특정 이름과 연관됩니다.

세 가지 옵션이 있습니다.

옵션 1 : 인터페이스

인터페이스 (또는 추상/기본 클래스)를 갖는 점 재 설계는 상호 교환 구현을 사용할 수 있다는 것입니다. (참조 : Liskov substitution principle.) 설계가 그렇게 할 수없는 경우 (이것이 어떻게 나타나는지) 설계를 재검토하는 것이 좋습니다. 다른 작업에 대해 서로 다른 인터페이스가 필요할 수 있습니다.

제공된 작은 스 니펫을 보면 각 전송 방법 (ISmsProvider, IEmailProvider)에 대해 서로 다른 인터페이스를 사용하는 것으로 생각할 수 있으므로 프로세서 "작업"클래스는 유형별로 적절하게 키를 지정할 수 있습니다.

옵션 2 : 서로 다른 "알려진 구성을"이있는 경우 사용 Autofac이

모듈 (예를 들어, 개발 한 생산을위한 하나)는 각 구성 create different Autofac modules 수 있습니다. XML 구성에서보다 모듈에서 훨씬 더 유연하게 작업 할 수 있으며 필요로하는 멋진 이름의 인스턴스를 수행 할 수 있습니다.

XML 구성을 사용하여 유형과 마찬가지로 모듈을 등록 할 수 있으므로 XML 구성 유형 등록을 다른 요구 사항에 따라 전환하는 대신 XML 구성을 변경하여 다른 모듈을 등록하십시오.

옵션 3 : 구현 고유의 XML 설정 파서 Autofac 3.0로

는 구성 메커니즘은 구문 분석하고 XML 구성을 등록 자신의 메커니즘을 작성하는 방법이있다.사이트의 문서는 아직 업데이트되지 않았으며 "요리 책"이나 샘플이 없으므로 소스에서 일부 독창적 인 작업을해야하지만 기술적으로 가능합니다. 아마이 첫 번째 옵션으로 들어가기 전에 처음 두 옵션 중 하나를 살펴볼 것입니다.

+0

저는 인터페이스를 다시 디자인하는 것이 맞다고 생각합니다. 나는 이메일 욥기가 SMS 메시지를 보내기 시작한다는 것을 알지 못한다. 그것은 기술적으로 잘 작동하지만 결코 일어나지 않을 것입니다. 내 디자인 실수를 지적 해 주셔서 감사합니다. – Mark