Я использую 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