public static async Task DispatchDomainEventsAsync(this IMediator mediator, XxxContext ctx, CancellationToken cancellationToken = default) { 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(); domainEntities .ToList() .ForEach(x => x.Entity.DomainEvents.Clear()); var tasks = domainEvents .Select(async(domainEvent) => { await mediator.Publish(domainEvent, cancellationToken); }); await Task.WhenAll(tasks); }
public BarRepository(XxxContext context) { _context = context; }
public FooRepository(XxxContext context) { _context = context; }