|
|
@ -1,28 +1,21 @@ |
|
|
|
using MediatR; |
|
|
|
using Microsoft.eShopOnContainers.Services.Ordering.Domain.Seedwork; |
|
|
|
using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure; |
|
|
|
using System.Linq; |
|
|
|
using System.Threading.Tasks; |
|
|
|
namespace Microsoft.eShopOnContainers.Services.Ordering.Infrastructure; |
|
|
|
|
|
|
|
namespace Ordering.Infrastructure |
|
|
|
static class MediatorExtension |
|
|
|
{ |
|
|
|
static class MediatorExtension |
|
|
|
public static async Task DispatchDomainEventsAsync(this IMediator mediator, OrderingContext ctx) |
|
|
|
{ |
|
|
|
public static async Task DispatchDomainEventsAsync(this IMediator mediator, OrderingContext ctx) |
|
|
|
{ |
|
|
|
var domainEntities = ctx.ChangeTracker |
|
|
|
.Entries<Entity>() |
|
|
|
.Where(x => x.Entity.DomainEvents != null && x.Entity.DomainEvents.Any()); |
|
|
|
var domainEntities = ctx.ChangeTracker |
|
|
|
.Entries<Entity>() |
|
|
|
.Where(x => x.Entity.DomainEvents != null && x.Entity.DomainEvents.Any()); |
|
|
|
|
|
|
|
var domainEvents = domainEntities |
|
|
|
.SelectMany(x => x.Entity.DomainEvents) |
|
|
|
.ToList(); |
|
|
|
var domainEvents = domainEntities |
|
|
|
.SelectMany(x => x.Entity.DomainEvents) |
|
|
|
.ToList(); |
|
|
|
|
|
|
|
domainEntities.ToList() |
|
|
|
.ForEach(entity => entity.Entity.ClearDomainEvents()); |
|
|
|
domainEntities.ToList() |
|
|
|
.ForEach(entity => entity.Entity.ClearDomainEvents()); |
|
|
|
|
|
|
|
foreach (var domainEvent in domainEvents) |
|
|
|
await mediator.Publish(domainEvent); |
|
|
|
} |
|
|
|
foreach (var domainEvent in domainEvents) |
|
|
|
await mediator.Publish(domainEvent); |
|
|
|
} |
|
|
|
} |