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); }