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);
}