public class IMessageHandler<T> {
void Handle(T message);
}
다른 이름 공간에 동일한 유형의 IMessageHandler 구현이 여러 개 있습니다.SimpleInjector로 특정 네임 스페이스의 인스턴스를 가져 오는 방법은 무엇입니까?
Context1Namesapce
Handler1.cs
Handler2.cs
Handler3.cs
Context2Namesapce
Handler1.cs
Handler2.cs
CompositeMessageHandler.cs
나는 CompositeMessageHandler 만 Context1Namespace에서 핸들러를 포함 반환해야합니다 코드 아래, 예를 예를 들어
을 해석 할 때 특정 네임 스페이스에 속한 핸들러가 필요합니다.
Type handlerType = typeof(IMessageHandler<>).MakeGenericType(message.GetType());
dynamic handler = _container.GetInstance(handlerType,"Context1Namespace");
어떻게하면이 논리를 simpleinjector로 구현할 수 있습니까?
대체 솔루션 : GetInsance 호출 후에 해결 된 인스턴스를 필터링 할 수 있지만 CompositeMessageHandler의 맨 위에 여러 데코레이터 처리기가 있으므로이 솔루션을 사용하면 문제가 발생할 수 있습니다.
왜 네임 스페이스 기반으로 필터링 하시겠습니까? – Steven
각 네임 스페이스마다 다른 작업자 (스레드)가 있습니다. 작업자는 대기열에서 메시지를 가져와 처리기를 실행하므로 각 작업자는 자체 처리기 만 실행해야합니다. – oguzh4n
그런 경우 나는 여전히 네임 스페이스 요구 사항이 이상하다고 생각합니다. 각 핸들러는 일반적으로 자율적이어야하며 자체 큐를 가지고 있으므로 다른 모든 핸들러와 독립적으로 실패하고 재 시도 될 수 있습니다. 네임 스페이스는 중요하지 않습니다. – Steven