제 처리기가 내 이벤트를 "잡는"데 문제가 있습니다. 현재의 구조는 Rebus 주변의 래퍼를 Rebus의 메소드를 감싸는 별도의 패키지에두고, Autofac과 함께 사용할 수있는 팩터를 노출한다는 것입니다.Rebus : 제네릭을 사용하여 이벤트 유형을 처리하는 방법
그런 다음 도메인 이벤트가 모두 별도의 패키지와 네임 스페이스에 있으므로 Rebus에 대해 알지 못합니다. 반대의 경우도 마찬가지입니다. 그는 모두 IDistributedEvent
유형에서 파생되며 추상 유형 DistributedEvent
을 구현합니다.
내가 이벤트를 게시 할 때 MessageSent
, 나는 다음 내 래퍼에 나는 Payload
속성으로 도메인 이벤트를 설정 봉투 이벤트 BusEvent
할 말 :
public Task Publish<T>(T payload, TimeSpan expiration) where T : IDistributedEvent
{
var message = new BusEvent<T> { Payload = payload };
return InternalBus.Publish(message, new Dictionary<string, string> {
{ Headers.TimeToBeReceived, expiration.ToString() },
{ "pd-version", payload.EventVersion.ToString() },
});
}
입니다 시간이 지남에 따라 메타 데이터를 추가하십시오 (그러나 이것은 잘못된 방법입니다).
어쨌든, 내 문제는 내 핸들러가 더 나는 인터페이스를 사용하여 처리기를 만들더라도, 유형 BusEvent<MessageSent>
을 처리 할 수있는 핸들러로 인식되는 지금입니다 IHandleMessages<BusEvent<T>> where T : IDistributedEvent
그래서 질문은 : 여기 잘못하고 있는가 , 또는이 단순히 그것을하는 나쁜 방법입니다. 따라서 필자는 엔벌 로프 형식을 제거하고 도메인 이벤트 유형을 직접 처리해야합니까?
포함되지 않습니다 그것은 분명히 간단하게 . 그러나, 나는 여전히 polymorphic 파견을 작동시키지 않을 수 있습니다. IDistributedEvent에 가입 한 버스 인스턴스에서 IHandleMessages를 구현하는 핸들러가 있습니다. –
Hulvej
핸들러 유형이 컨테이너에 등록되어 IHandleMessages를 확인할 때 반환되는 방식입니까? –
mookid8000
또 다른 사항 :'SomeEvent' 또는 구체적인 유형이 무엇이든간에 구독해야합니다. Rebus가 메시지를 게시 할 때 메시지 유형에서 주제를 유추합니다. 메시지 유형은 기본적으로 (단순한) 어셈블리 규정 유형 이름입니다. 'MyMessages와 같은 것.SomeEvent, MyMessages' – mookid8000