나는 이것을 overthinking 수도 있습니다. 나는 그렇게 희망한다.캐슬 Windsor 특정 구성 요소의 주입
.Net 4.5, C# 5 Windows 서비스에서는 Castle Windsor 3.2를 CollectionResolver
과 함께 사용하고 있습니다. 우리는 당신이 기대하는대로 인터페이스 IEncryptionService
을 가지고 있으며, 두 개의 클래스가 그 인터페이스를 구현합니다. 이 서비스는 하나의 데이터를 해독하고 다른 데이터를 다시 암호화함으로써 다른 두 시스템을 통합하고 연결해야합니다.
두 구현은 모두 대상 시스템에 따라 이름을가집니다.
Component.For<IEncryptionService>()
.ImplementedBy<System1EncryptionService>()
.Named("system1-encryption")
.LifestyleTransient(),
Component.For<IEncryptionService>()
.ImplementedBy<System2EncryptionService>()
.LifestyleTransient()
.Named("system2-encryption"));
Windows 서비스 클래스는 생성자 삽입을 사용하여 IEncryptionService[]
유형의 배열을 수신합니다. 두 가지 암호화 클래스가 모두 주입됩니다.
거기에 문제가 있습니다. 한 시스템에는 하나의 구현을 사용해야하고 다른 시스템에는 하나의 구현을 사용해야합니다. 지금까지 구현 한 방식대로 서로 구별 할 수 없습니다.
해결책은 무엇입니까? 형식이 지정된 공장은 건축상의 결함을 감추는 반 패턴처럼 보입니다. 하지만 내가 생각해 낸 유일한 것. 구성 요소의 이름을 지정했습니다. 다른 구성 요소에서이를 활용할 수 있습니까? 아니면 주사를 잊어서 직접 인스턴스화해야합니까?
나는 이런 종류의 상황이 자주 발생하여 충분히 처리 할 수있을 것이라고 생각한다. 당신은이에 따라 구성 요소를 등록 할 때