public EventHandlerNotFoundException(EntityBase entity, DomainEvent @event) : base(GetErrorMessage(entity, @event)) { }
void IEntity.ApplyEvent(DomainEvent @event) { ApplyEvent(@event); }
private static string GetErrorMessage(EntityBase entity, DomainEvent @event) { return String.Format("Unable to locate an event handler for {0} on {1}", @event.GetType().FullName, entity.GetType().FullName); }
protected virtual void ApplyEvent(DomainEvent @event) { try { var eventType = @event.GetType(); if(eventType.GetCustomAttribute<EventDoesNotMutateStateAttribute>() == null) { eventHandlers[eventType].Invoke(@event); } } catch (TargetInvocationException ex) { throw new EventHandlerInvocationException(this, @event, ex); } catch (KeyNotFoundException) { throw new EventHandlerNotFoundException(this, @event); } }
protected virtual void RaiseEvent(DomainEvent @event) { ApplyEvent(@event); SaveEvent(@event); }
internal abstract void SaveEvent(DomainEvent @event);
public EventHandlerInvocationException(EntityBase entity, DomainEvent @event, TargetInvocationException ex) : base(GetErrorMessage(entity, @event), ex.InnerException ?? ex) { }
private static string GetErrorMessage(EntityBase entity, DomainEvent @event) { return String.Format("An error occured while invoking event handler {0} on {1}", @event.GetType().FullName, entity.GetType().FullName); }
private static string GetErrorMessage(EntityBase entity, DomainEvent @event) { return(String.Format("Unable to locate an event handler for {0} on {1}", @event.GetType().FullName, entity.GetType().FullName)); }