Отложить некоторые обработчики событий после совершения транзакции? - PullRequest
0 голосов
/ 21 апреля 2019

Я использую MediatR в своем хранилище для отправки событий домена.Обработчики на уровне моего домена будут вызывать побочные эффекты, которые необходимо обработать до того, как данные будут добавлены в базу данных, а обработчики на уровне моего приложения должны выполняться после фиксации (т. Е. Поместить сообщение в очередь или отправить электронное письмоcustomer).

Проблема, с которой я столкнулся, заключается в том, что все обработчики из коробки будут выполняться до или после, но не оба сразу.Есть ли способ обойти это?

CommerceEntityFrameworkRepository.cs

public async Task Save(CancellationToken cancellationToken = default)
{
    var eventsPublished = _db.ChangeTracker
        .Entries<TAggregateRoot>()
        .Select(entry => entry.Entity)
        .ToList()
        .SelectMany(aggregate =>
        {
            var @events = aggregate.GetEvents();
            aggregate.ClearEvents();
            return events;
        })
        .Select(@event => _mediator.Publish(@event, cancellationToken))
        .ToList();

    await Task.WhenAll(eventsPublished);

    await _db.SaveChangesAsync(cancellationToken);
}

Вы можете найти репозиторий здесь: https://github.com/jakeam/MyShop

...