WaiterMediator 1.0.1

dotnet add package WaiterMediator --version 1.0.1
                    
NuGet\Install-Package WaiterMediator -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="WaiterMediator" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="WaiterMediator" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="WaiterMediator" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add WaiterMediator --version 1.0.1
                    
#r "nuget: WaiterMediator, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package WaiterMediator@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=WaiterMediator&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=WaiterMediator&version=1.0.1
                    
Install as a Cake Tool

WaiterMediator

Implementação leve do padrão Mediator para .NET, focada em cenários CQRS e Domain Events. Fornece abstrações e uma implementação simples para envio de requisições, publicação de notificações e processamento assíncrono de domain events.

Visão geral

  • Projeto: WaiterMediator (TargetFramework: net10.0)
  • Pacote NuGet: WaiterMediator (versão contida em WaiterMediator.csproj)
  • Objetivo: permitir envio/recebimento de mensagens (requests/notifications), composition de comportamentos (pipeline) e enfileiramento de eventos de domínio para processamento em background.

Principais conceitos / APIs

  • IRequest<TResponse> – marca uma requisição que produz TResponse.
  • IRequestHandler<TRequest, TResponse> – processa uma requisição e retorna TResponse.
  • INotification – marca uma notificação/evento sem retorno.
  • INotificationHandler<TNotification> – processa notificações.
  • IPipelineBehavior<TRequest, TResponse> – compõe lógica antes/depois do handler.
  • IWaiter – mediador para Send (requisições) e Publish (notificações).
  • IDomainEventQueue – fila para enfileirar INotification para processamento assíncrono (implementação disponível em WaiterMediator.Extensions.Queues).

Requisitos

  • .NET 10.0
  • Recomenda-se usar o sistema de DI do Microsoft.Extensions.DependencyInjection.

Instalação

Via NuGet:

dotnet add package WaiterMediator --version 1.0.1

Ou referenciando os projetos na solução para desenvolvimento local.

Registro no DI

Exemplo de registro do mediador e descoberta automática de handlers/behaviors:

builder.Services.AddWaiter(); // varre assemblies carregados
// ou informar assemblies explicitamente:
builder.Services.AddWaiter(typeof(Program).Assembly);

O método AddWaiter registra:

  • IWaiter (implementação Waiter)
  • Implementações de IRequestHandler<,>, INotificationHandler<> e IPipelineBehavior<,> encontradas nos assemblies escaneados.

Uso básico

Definir uma requisição e handler:

public record GetUserQuery(int Id) : IRequest<UserDto>;

public class GetUserHandler : IRequestHandler<GetUserQuery, UserDto>
{
    public Task<UserDto> Handle(GetUserQuery request, CancellationToken cancellationToken)
    {
        // Implementação...
        throw new NotImplementedException();
    }
}

Enviar uma requisição:

var result = await waiter.Send(new GetUserQuery(1), cancellationToken);

Definir e publicar uma notification:

public record UserCreatedEvent(int UserId) : INotification;

public class UserCreatedHandler : INotificationHandler<UserCreatedEvent>
{
    public Task Handle(UserCreatedEvent notification, CancellationToken cancellationToken)
    {
        // Implementação...
        return Task.CompletedTask;
    }
}

await waiter.Publish(new UserCreatedEvent(1), cancellationToken);

Adicionar comportamento de pipeline:

public class LoggingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
    where TRequest : IRequest<TResponse>
{
    public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, Func<Task<TResponse>> next)
    {
        // Antes do handler
        var response = await next();
        // Depois do handler
        return response;
    }
}

Boas práticas e observações

  • Garanta que exista exatamente um IRequestHandler<TRequest, TResponse> registrado para cada TRequest.
  • Handlers de notificação podem ser múltiplos (pub/sub).
  • Comportamentos de pipeline são resolvidos e executados em ordem reversa da descoberta (último registrado executa primeiro).

Contribuição

  • Fork → branch → PR
  • Issues e melhorias são bem-vindas.
  • Adicione testes para novas features e mantenha consistência das abstrações.

Licença

  • MIT – confira a licença no repositório.

Autor e repositório

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.0.1 452 12/9/2025
1.0.0 450 12/9/2025