Ejemplo n.º 1
0
    public async Task Publish(StoredEvent message, System.Threading.CancellationToken cancellationToken)
    {
        try
        {
            Type messageType = StoredEventHelper.GetEventType(message.MessageType);
            var  domainEvent = JsonConvert.DeserializeObject(message.Payload, messageType);

            if (messageType != null && domainEvent != null)
            {
                await _mediator.Publish(domainEvent, cancellationToken);
            }
        }
        catch (Exception ex)
        {
            _logger.LogError($"\n--- An error has occurred while publishing message {message.Id}: {ex.Message}\n");
        }
    }
Ejemplo n.º 2
0
    protected async override Task StoreEvents(CancellationToken cancellationToken)
    {
        var entities = DbContext.ChangeTracker.Entries()
                       .Where(e => e.Entity is IAggregateRoot c && c.DomainEvents != null)
                       .Select(e => e.Entity as IAggregateRoot)
                       .ToArray();

        foreach (var entity in entities)
        {
            var messages = entity.DomainEvents
                           .Select(e => StoredEventHelper.BuildFromDomainEvent(e as DomainEvent, _eventSerializer))
                           .ToArray();

            entity.ClearDomainEvents();
            await DbContext.AddRangeAsync(messages, cancellationToken);
        }
    }