Example #1
0
        public async Task <Exception> Dispatch(AggregateBase aggregate)
        {
            var repository = GetRepository(aggregate.GetType());

            foreach (var domainEvent in aggregate.Outbox.ToArray())
            {
                try
                {
                    var handler = GetHandler(domainEvent);

                    await handler.Handle(domainEvent, _serviceFactory);

                    aggregate.ProcessDomainEvent(domainEvent);

                    await repository.Update(aggregate);
                }
                catch (Exception ex)
                {
                    return(ex);
                }
            }
            return(null);
        }