MinDiator 1.0.3.1

dotnet add package MinDiator --version 1.0.3.1
                    
NuGet\Install-Package MinDiator -Version 1.0.3.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="MinDiator" Version="1.0.3.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MinDiator" Version="1.0.3.1" />
                    
Directory.Packages.props
<PackageReference Include="MinDiator" />
                    
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 MinDiator --version 1.0.3.1
                    
#r "nuget: MinDiator, 1.0.3.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 MinDiator@1.0.3.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=MinDiator&version=1.0.3.1
                    
Install as a Cake Addin
#tool nuget:?package=MinDiator&version=1.0.3.1
                    
Install as a Cake Tool

🧠 MinDiator

MinDiator é uma biblioteca leve, moderna e sem dependências externas que implementa o padrão Mediator, sendo ideal para aplicações baseadas em CQRS e arquitetura Vertical Slice.

Inspirado no padrão Mediator, mas com foco em simplicidade, extensibilidade e performance.


🚀 Por que usar o MinDiator?

  • Zero dependências externas
  • 🧱 Pensado para CQRS – separa claramente Commands e Queries
  • 🧩 Ideal para Vertical Slice Architecture – organização de features por funcionalidade
  • 🧪 Pipeline Behavior embutido – suporte a logging, validação, autenticação, etc.
  • 🧠 Interfaces simples: IRequest, IRequestHandler, IPipelineBehavior, IRequestExceptionHandler
  • 🧰 Fácil de extender e customizar
  • 🧵 Mais controle do que entra no seu container – sem reflexão mágica

📦 Instalação

dotnet add package MinDiator

⚙️ Como configurar

1. Setup com DI

Você pode registrar o MinDiator diretamente no Startup.cs ou no seu Program.cs:

// MinDiator setup
services.AddMinDiator(cfg =>
{
    cfg.RegisterServicesFromAssembly(typeof(SampleRequest).Assembly);

    cfg.AddBehavior(
        typeof(MinDiator.Interfaces.IPipelineBehavior<,>),
        typeof(MinDiatorPerformanceBehavior<,>)
    );
});
  • RegisterServicesFromAssembly(...): Registra todos os IRequestHandler, IPipelineBehavior e IRequestExceptionHandler presentes no assembly.
  • AddBehavior(...): Permite adicionar behaviors customizados ao pipeline (como logging, validação, etc).

2. Exemplo simples

public class SampleRequest : IRequest<string>
{
}

public class SampleHandler : IRequestHandler<SampleRequest, string>
{
    public Task<string> Handle(SampleRequest request, CancellationToken cancellationToken = default)
    {
        return Task.FromResult("ok");
    }
}

🧭 Entendendo o padrão CQRS

CQRS (Command Query Responsibility Segregation) divide as responsabilidades da aplicação em:

Tipo Interface Retorno Responsabilidade
Command IRequest<Unit> Unit Executar uma ação (ex: criar, atualizar, deletar)
Query IRequest<T> T Buscar um dado (ex: listar, detalhar)

🧱 Vertical Slice + MinDiator

Com a arquitetura Vertical Slice, sua aplicação é dividida por feature, e não por camada (ex: Controllers, Services, Repositories). Isso ajuda a manter cada funcionalidade autocontida e de fácil manutenção.

💡 Como MinDiator ajuda:

  • Cada requisição (IRequest) representa uma única ação da aplicação.
  • Cada handler (IRequestHandler) representa a lógica isolada daquela ação.
  • Os Behaviors permitem adicionar funcionalidades transversais (cross-cutting) de forma organizada.

📁 Exemplo de organização com Vertical Slice

Features/
└── Usuarios/
    ├── Create/
    │   ├── CreateUsuarioCommand.cs
    │   ├── CreateUsuarioHandler.cs
    │   └── CreateUsuarioValidator.cs
    └── Get/
        ├── GetUsuarioQuery.cs
        ├── GetUsuarioHandler.cs

🧪 Pipeline Behavior

Você pode criar middlewares para interceptar qualquer request:

public class MinDiatorPerformanceBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
    private readonly ILogger<MinDiatorPerformanceBehavior<TRequest, TResponse>> _logger;

    public MinDiatorPerformanceBehavior(ILogger<MinDiatorPerformanceBehavior<TRequest, TResponse>> logger)
    {
        _logger = logger;
    }

    public async Task<TResponse> Handle(
        TRequest request,
        CancellationToken cancellationToken,
        RequestHandlerDelegate<TResponse> next)
    {
        var stopwatch = Stopwatch.StartNew();

        var response = await next();
        stopwatch.Stop();

        _logger.LogInformation("[MinDiator] {Request} executed in {Elapsed}ms", request.GetType().Name, stopwatch.ElapsedMilliseconds);

        return response;
    }
}

✅ Roadmap

  • Pipeline Behaviors
  • Exception Handlers
  • Test helpers

🤝 Contribuições

Pull requests são super bem-vindos. Se quiser contribuir com uma ideia, melhoria ou bugfix, fique à vontade para abrir uma issue ou PR.


📄 Licença

MIT © fguimaraess

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  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.3.1 204 4/24/2025
1.0.3 175 4/22/2025
1.0.2.6 203 4/14/2025
1.0.2.5 162 4/11/2025
1.0.2.4 164 4/6/2025
1.0.2.3 102 4/5/2025
1.0.2.2 97 4/5/2025
1.0.2.1 107 4/5/2025
1.0.2 94 4/5/2025
1.0.1 163 4/4/2025
1.0.0 170 4/3/2025