예제 #1
0
        private async Task ProcessDomainEvents()
        {
            var aggregateRootType = typeof(AggregateRoot);
            var aggRootEntries    = Context.ChangeTracker
                                    .Entries()
                                    .Select(e => e.Entity)
                                    .Where(e => e.GetType().IsSubclassOf(aggregateRootType));

            foreach (var aggRoot in aggRootEntries)
            {
                foreach (var domainEvent in (aggRoot as AggregateRoot).Events)
                {
                    await domainEventBus.Handle(domainEvent);

                    if (domainEvent.Auditable)
                    {
                        await auditor.Audit(domainEvent);
                    }
                }
            }
        }