사용하여 인수 이름에 따라 다른 종속성을 주입합니다. 그래서 하드 I이 필요합니다 어떻게이 같은 구조를 가지고 윈저
var p = new Processor<T>(new Manager<T>(new XmlProvider()) , new Manager<T>(new MemoryProvider()))
이 또한 내가이를 관리하는 컨테이너를 구성하는 방법을 알아낼 수 없습니다 사용하여이 열린 제네릭 형식 T.
를 해결해야합니다. 나는 .DependsOn(Property.ForKey("xmlManager").Eq()
지시어가 있다는 것을 알고있다. 하지만 하드 코딩 된 구현을 제외하고는 Eq()
에 무엇을 써야하는지 이해할 수 없습니다. 제공자는 자체 종속성을가집니다. 따라서 .Eq(new Manager<T>(new XmlProvide(new OtherInjection(new AnotherOne()))))
을 쓰는 것은 영리하지 않습니다. 그리고 오픈 제네릭을 사용할 수 없습니다.
UPD 1 Mr NightOwl888. 논리 정보. 한 공급자는 메모리 캐시에 데이터를 저장하는 것입니다. 두 번째 공급자는 데이터를 XML 파일에 저장하는 데 사용됩니다. 어떤 종류의 2 레벨 캐시 모델. 두 개의 매개 변수를 바꿔도 (Steven이 말한 것처럼) 깨지는 않을 것이지만, 설계된대로 작동하지 않을 것입니다 (정보 검색의 속도가 너무 빠름).
속성 삽입을 사용할 수 있습니다 : http://stackoverflow.com/questions/5030431/castle-windsor-map-named-component-to-specific-property 또는 http://stackoverflow.com/questions/11325699/castle 여기를 참조하십시오. -windsor-how-to-map-named-in-constructor-injection – Ric
우연히 두 매개 변수를 교환하면 어떻게됩니까? 당신의'프로세서'휴식겠습니까? 그렇다면 Liskov Substitution Principle을 위반하고 있으며 설계를 다시 생각해 볼 수 있습니다. – Steven
@ Steven에 동의합니다. 추상화 (인터페이스)의 전체적인 요점은'Processor'가 당신이 다루고있는 구체적인 유형의 IMANager을 알지 못해 구현을 바꿀 수 있다는 것입니다. 디자인에 따라, '프로세서'는 이러한 세부 사항을 알고 있으며, 나중에 제 3의 'IManager '유형이 도입되면 그것은 '프로세서'에 대한 급격한 변화입니다. 'Processor'는 * IMANager 을 하나 이상 실행해야합니까, 아니면 조건에 따라 * 하나를 선택합니까? '프로세서'는이 논리를 포함시켜 단일 책임 원칙을 위반합니다. 또한 어떤 논리가 설계에서 불분명한지도 모른다. –
NightOwl888