public void HandleEvent <T>(T e) where T : IEvent { if (e == null) { throw new ArgumentNullException("e", "Cannot handle a null event."); } if (_idempotencyChecker.CheckIdempotency(e.EventId)) { return; } _databaseLayer.ExecuteInTransaction(() => { foreach (var handler in FindEventHandlers <T>().Where(x => !x.GetType().Name.StartsWith("Lookup"))) { handler.Handle(e); } foreach (var handler in FindEventHandlers <T>().Where(x => x.GetType().Name.StartsWith("Lookup"))) { handler.Handle(e); } _idempotencyChecker.MarkEventAsProcessed(e.EventId); }); }
private void PersistEventsInTransaction(IAggregateRoot aggRoot, ICommand c) { _databaseLayer.ExecuteInTransaction(() => { foreach (var e in aggRoot.PendingEvents) { PersistEventToDatabase(e, c, aggRoot.AggregateId); } }); }