</>
Plan du cours — 34/46

MediatR — pattern Mediator / CQRS

Intermédiaire

MediatR découple l'émetteur d'une requête de son traitement, en passant par un médiateur central. Très utilisé pour structurer une application selon CQRS (séparer les commandes qui modifient l'état des requêtes qui le lisent).

dotnet add package MediatR
public record CreerUtilisateurCommand(string Nom, string Email) : IRequest<Utilisateur>;

public class CreerUtilisateurHandler(IUtilisateurRepository repo)
    : IRequestHandler<CreerUtilisateurCommand, Utilisateur>
{
    public async Task<Utilisateur> Handle(CreerUtilisateurCommand cmd, CancellationToken ct) =>
        await repo.CreerAsync(cmd.Nom, cmd.Email);
}

// Enregistrement
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Program>());

// Utilisation dans un endpoint : le handler exact est résolu automatiquement
app.MapPost("/utilisateurs", async (CreerUtilisateurDto dto, IMediator mediator) =>
{
    var u = await mediator.Send(new CreerUtilisateurCommand(dto.Nom, dto.Email));
    return Results.Created($"/utilisateurs/{u.Id}", u);
});