diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs index a03a5eb..c6de763 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Abstractions/DispatchDomainEventExtensions.cs @@ -15,22 +15,21 @@ public static class DispatchDomainEventExtensions /// 要发布的领域事件。 public static async Task DispatchDomainEventsAsync(this IMediator mediator, IEnumerable events) { - Exception? e = null; - foreach (var domainEvent in events) + foreach (var domainEvent in events ?? Enumerable.Empty()) { - try + if (domainEvent == null) { - await mediator.Publish(domainEvent); + continue; } - catch (Exception exception) + + if (domainEvent is INotification notification) { - e ??= exception; + await mediator.Publish(notification); + } + else + { + await mediator.Publish(domainEvent); } - } - - if (e is not null) - { - throw e; } } } \ No newline at end of file diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/BaseRepository.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/BaseRepository.cs index 31403d6..a30d9ad 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/BaseRepository.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/BaseRepository.cs @@ -1,4 +1,4 @@ -using System.Linq.Expressions; +using System.Linq.Expressions; using Cnblogs.Architecture.Ddd.Domain.Abstractions; using MediatR; using Microsoft.EntityFrameworkCore; @@ -173,6 +173,12 @@ private async Task ExtraAndPublishDomainEventsAsync() var entities = Context.ExtractDomainEventSources(); var domainEvents = entities.SelectMany(x => x.DomainEvents!.OfType()).ToList(); entities.ForEach(x => x.ClearDomainEvents()); + + if (domainEvents is null || domainEvents.Any() == false) + { + return; + } + await BeforeDispatchDomainEventAsync(domainEvents, Context); await _mediator.DispatchDomainEventsAsync(domainEvents); }