CleanArch.DevKit.Mediator.Domain
1.1.1
dotnet add package CleanArch.DevKit.Mediator.Domain --version 1.1.1
NuGet\Install-Package CleanArch.DevKit.Mediator.Domain -Version 1.1.1
<PackageReference Include="CleanArch.DevKit.Mediator.Domain" Version="1.1.1" />
<PackageVersion Include="CleanArch.DevKit.Mediator.Domain" Version="1.1.1" />
<PackageReference Include="CleanArch.DevKit.Mediator.Domain" />
paket add CleanArch.DevKit.Mediator.Domain --version 1.1.1
#r "nuget: CleanArch.DevKit.Mediator.Domain, 1.1.1"
#:package CleanArch.DevKit.Mediator.Domain@1.1.1
#addin nuget:?package=CleanArch.DevKit.Mediator.Domain&version=1.1.1
#tool nuget:?package=CleanArch.DevKit.Mediator.Domain&version=1.1.1
CleanArch.DevKit.Mediator.Domain
Pont entre les événements de domaine (IDomainEvent) et le médiateur (IMediator.Publish).
Rôle
Le package CleanArch.DevKit.Domain définit IDomainEvent comme primitive pure, sans dépendance sur un dispatcher. Ce package fournit le minimum nécessaire pour publier ces événements à travers le médiateur — sans coupler la couche domaine à Mediator.Core. Concrètement : une interface marqueuse IDomainEventNotification (qui combine les deux), et une extension PublishDomainEventsAsync qui drain le buffer d'un agrégat et dispatche chaque événement avec son type concret.
Installation
dotnet add package CleanArch.DevKit.Mediator.Domain
Dépend de CleanArch.DevKit.Domain et de CleanArch.DevKit.Mediator.
Fonctionnalités
- Marquer un événement de domaine comme dispatchable via
IDomainEventNotification - Publier les événements bufferisés d'un agrégat avec
PublishDomainEventsAsync - Dispatch par type runtime (les handlers du type concret sont atteints)
Marquer un événement comme dispatchable
IDomainEventNotification combine IDomainEvent (côté domaine) et INotification (côté médiateur) :
public interface IDomainEventNotification : IDomainEvent, INotification { }
Implémenter cette interface sur les événements que les handlers du médiateur doivent recevoir :
public sealed record UserCreated(UserId Id, string Email) : IDomainEventNotification;
public sealed record InternalAuditTouch(UserId Id) : IDomainEvent;
// (reste interne à l'agrégat, jamais publié via le médiateur)
Les événements qui n'implémentent que IDomainEvent restent dans le buffer de l'agrégat mais ne sont pas publiés par PublishDomainEventsAsync.
Publier les événements d'un agrégat
Après que l'agrégat ait fait son travail et bufferisé ses événements via Raise(...), appeler PublishDomainEventsAsync pour les vider et les dispatcher :
public sealed class CreateUserHandler(IMediator mediator, IUserRepository repo)
: IRequestHandler<CreateUser, Result<UserId>>
{
public async Task<Result<UserId>> Handle(CreateUser cmd, CancellationToken ct)
{
var user = User.Create(cmd.Email, cmd.Name, cmd.Age);
await repo.SaveAsync(user, ct); // 1. commit
await mediator.PublishDomainEventsAsync(user, ct); // 2. drain + publish
return user.Id;
}
}
La méthode :
- Snapshot des événements bufferisés
ClearDomainEvents()sur l'agrégat- Pour chaque événement qui implémente
INotification,mediator.Publish(...)avec le type concret runtime
L'usage du type runtime garantit que les INotificationHandler<UserCreated> sont atteints — un dispatch via le type statique IDomainEvent ne trouverait personne.
Côté handler
Le handler ne sait rien du pont — c'est un INotificationHandler<T> classique :
public sealed class SendWelcomeEmailOnUserCreated(IEmailService emails)
: INotificationHandler<UserCreated>
{
public Task Handle(UserCreated evt, CancellationToken ct)
=> emails.SendWelcomeAsync(evt.Email, ct);
}
Le pattern recommandé est commit puis publish : si le commit échoue, aucun événement n'est diffusé ; si la publication échoue, les changements sont déjà persistés mais l'agrégat n'a plus d'événement en mémoire (pour rejouer, utiliser un outbox).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- CleanArch.DevKit.Domain (>= 1.1.1)
- CleanArch.DevKit.Mediator (>= 1.1.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.1 | 87 | 5/17/2026 |
| 1.1.0 | 78 | 5/17/2026 |
| 1.0.0 | 103 | 5/15/2026 |
| 0.1.0-preview.1 | 50 | 5/14/2026 |