/// <summary> /// Dispatches each <see cref="IDomainEvent"/> that was added to any <see cref="IAggregateRoot"/> before <see cref="CommitAsync"/> was called. /// </summary> /// <param name="dispatcher">The <see cref="IDomainEventDispatcher"/>.</param> /// <param name="events">The <see cref="IEnumerable{T}"/> of <see cref="IDomainEvent"/>.</param> /// <returns></returns> protected virtual async Task DispatchEventsAsync(IDomainEventDispatcher dispatcher, IEnumerable <IDomainEvent> events) { foreach (var @event in events) { await dispatcher.RaiseAsync(@event); } }
public virtual async Task CommitAsync() { var events = new List <IDomainEvent>(); foreach (var entity in GetEntities().Where(e => e.DomainEvents.Any())) { events.AddRange(entity.DomainEvents); entity.ClearEvents(); } foreach (var @event in events) { await _dispatcher.RaiseAsync(@event); } }