다른 형식의 출력을 생성하는 프로젝트가 있습니다. 아키텍처는이 같은 관한 것입니다 :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 : 내가 읽은 내용에서 멀티 테넌트 등록이 옳은 일일 수도 있습니다. 단지 기본값이 없습니다.
덕분에, 최대
내가 멀티 테넌시 (multi-tenancy) 당신이 모든 의존성을 지정하지 않는 경우, 계신 추측을 쓴 경우에도 각 플러그인에 대해 – Amy
실제로 예, 각 플러그인은 * 모든 * 종속성을 구현합니다 (공통 부분은 추상 기본 클래스에 있습니다) – ModernRonin
이것은 도움이 될 수 있습니다 : http://autofac.readthedocs.io/en/latest/faq/select-by-context.html –