2016-11-09 5 views
1

다른 형식의 출력을 생성하는 프로젝트가 있습니다. 아키텍처는이 같은 관한 것입니다 :Autofac : 여러 플러그인을 분리하는 방법

Xyz.Core 
Xyz.FormatA 
Xyz.FormatB 
Xyz.Runner` 

Xyz.FormatA하고 ... 모두 FormatB은에 ... 핵심 따라 달라집니다. 러너는 모든 것에 달려 있습니다.

지금 코어도, 예를

IFormatSpecifics 
IWriter 
IFormatWorker` 

등 일부 추상 클래스, 인터페이스의 모든 종류를 제공합니다. FormatA와 FormatB는 모두 IFormatWorker의 구현을 포함합니다.이 형식은 특정 루트 객체의 형식이며 실제 호출되지는 않습니다.이 예제는 필자가 수행해야 할 작업을 추상화 한 것입니다. 다른 것들은 주로 추상 클래스에서 파생됩니다. 이미 작업의 일부인 코어. Runner는 콘크리트 IFormatWorkers를 인스턴스화하고 작업을 수행 할 수있게합니다.

지금까지이 모든 것이 IOC 컨테이너없이 진행되었습니다. 이제 Autofac 사용으로 전환하고 싶습니다.

이제 내 질문입니다 : Xyz.FormatA의 IFormatWorker 구현이 IFormatSpecifics, IWriter 등의 구현을 Xyz.FormatA 내부에서 가져오고 FormatB와 유사하도록 해당 메커니즘을 만들어야합니다. 저의 글을 읽으면서 옳은 길은 모듈 (각 형식에 하나씩)과 키드 서비스 (Keyed Services)를 사용하는 것과 관련이 있어야한다고 생각합니다. 다른 한편, 나는 stackflow (https://stackoverflow.com/a/26798803/2105891)에 대한 참조를 보았는데, 이는 플러그인과 같은 시나리오에서 별도의 컨테이너가 올바른 것임을 나타냅니다.

EDIT : 내가 읽은 내용에서 멀티 테넌트 등록이 옳은 일일 수도 있습니다. 단지 기본값이 없습니다.

덕분에, 최대

+0

내가 멀티 테넌시 (multi-tenancy) 당신이 모든 의존성을 지정하지 않는 경우, 계신 추측을 쓴 경우에도 각 플러그인에 대해 – Amy

+0

실제로 예, 각 플러그인은 * 모든 * 종속성을 구현합니다 (공통 부분은 추상 기본 클래스에 있습니다) – ModernRonin

+0

이것은 도움이 될 수 있습니다 : http://autofac.readthedocs.io/en/latest/faq/select-by-context.html –

답변

0

나는 내가 원하는 일을 Autofac위한 작은 플러그인을 썼다. 그것은 nuget 패키지로 사용할 수 : https://www.nuget.org/packages/Autofac.Extras.Plugins/

소스는 기본적으로 https://github.com/ModernRonin/Autofac.Extras.Plugins

에서 찾을 수 있습니다, 그것은 키 입력 서비스를 사용하지만이 특정 사용 사례에 대한 복잡성의 일부를 숨 깁니다.

의견 및 기고를 환영합니다.

PS : 나는이 작업 nuget 패키지에 응답 희망하는 것은, SO 여기 괜찮 나 자신 :