示例#1
0
        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);
            });
        }
示例#2
0
 private void PersistEventsInTransaction(IAggregateRoot aggRoot, ICommand c)
 {
     _databaseLayer.ExecuteInTransaction(() =>
     {
         foreach (var e in aggRoot.PendingEvents)
         {
             PersistEventToDatabase(e, c, aggRoot.AggregateId);
         }
     });
 }