Beispiel #1
0
        public async Task <TResult> Handle(TCommand command)
        {
            var result = await _handler.Handle(command);

            var domainEntities = _context.ChangeTracker
                                 .Entries <Entity>()
                                 .Where(x => x.Entity.Events != null && x.Entity.Events.Any())
                                 .ToList();

            var domainEvents = domainEntities
                               .SelectMany(x => x.Entity.Events)
                               .ToList();

            domainEntities
            .ForEach(entity => entity.Entity.ClearEvents());

            foreach (var domainEvent in domainEvents)
            {
                _logger.LogInformation("Publishing domain event {domainEventType}.", domainEvent.GetType().Name);
                _logger.LogDebug("Publishing domain event {domainEventType} ({@domainEvent}).", domainEvent.GetType().Name, domainEvent);
                await _domainEventPublisher.PublishAsync(domainEvent);
            }

            return(result);
        }
 public async Task DispatchDomainEventsAsync()
 {
     foreach (var domainEvent in domainEvents)
     {
         await dispatcher.PublishAsync(domainEvent);
     }
     ClearDomainEvents();
 }
        public async Task DispatchDomainEventsAsync()
        {
            foreach (var domainEvent in _domainEvents)
            {
                await _dispatcher
                .PublishAsync(domainEvent)
                .ConfigureAwait(false);
            }

            ClearDomainEvents();
        }
        public async Task Publish()
        {
            var domainEvents = _domainEventAccessor.Events.ToList();

            _domainEventAccessor.ClearAllDomainEvents();

            var integrationEvents = _mappers.SelectMany(x => x.Map(domainEvents)).ToArray();

            await _integrationEventsPublisher.AddEvents(integrationEvents);

            var tasks = domainEvents.Select(e => _dispatcher.PublishAsync(e));
            await Task.WhenAll(tasks);
        }