В настоящее время я использую этот шаблон для обработки событий, происходящих из какого-либо приемника событий (например, служебной шины предприятия, очереди, EventStore). Идея состоит в том, чтобы создать несколько экземпляров IEventWorkers (см. Конкретный пример ниже) в списке и передать события, например, путем вызова методов HandleEvent для каждого экземпляра во время циклирования по списку. Это базовый код бетона IEventWorkers:использование хранимых событий несколькими пользователями и обработчиками событий
public class EventWorker : IEventWorker
{
private Dictionary<Type, Action<object>> CreateEventHandlerMapping()
{
return new Dictionary<Type, Action<object>>
{
{typeof (Event1), o => Handle(o as Event1)},
{typeof (Event2), o => Handle(o as Event2)},
};
}
private void Handle(Event1 eventToHandle)
{
}
private void Handle(Event2 eventToHandle)
{
}
public void HandleEvent(IEvent evt)
{
var eventType = evt.GetType();
if (_eventHandlerMapping.ContainsKey(eventType))
{
_eventHandlerMapping[eventType](evt);
}
}
}
Возможно, есть лучший способ сделать это?
PS:
This приходит довольно близко к тому, что я пытаюсь достичь. Я не совсем понимаю, как работает ObserverRegistry для распространения всех событий, например, из очереди событий.