public static void Dispatch(AggregateRoot aggregate, IEvent @event) { var router = _routers.GetOrAdd( aggregate.GetType(), t => new Lazy<EventRouter>( () => new EventRouter(t))) .Value; router.InternalDispatch(aggregate, @event); }
public virtual void InternalDispatch(AggregateRoot aggregate, IEvent @event) { if (@event == null) throw new ArgumentNullException("event"); MethodInfo handler; if (this._handlers.TryGetValue(@event.GetType(), out handler)) handler.Invoke(aggregate, new[] { @event }); else throw new HandlerNotFoundException(@event); }