MediatR para C# (.NET): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é MediatR e para que serve?

\n\n

MediatR é uma biblioteca leve, porém poderosa, para .NET que implementa o padrão Mediator (Mediador). No mundo do desenvolvimento de software, especialmente em aplicações construídas na arquitetura CQRS (Command Query Responsibility Segregation — Separação de Responsabilidade entre Comandos e Consultas), o MediatR se tornou o padrão de facto.

\n\n

Para que serve?

\n

Na arquitetura clássica, quando uma classe (por exemplo, um controlador) deseja executar uma ação em outra classe (por exemplo, um serviço), ela precisa saber da existência desse serviço e de sua interface. Isso cria alto acoplamento (tight coupling). Se você quiser adicionar logging, validação ou cache antes de chamar o serviço, terá que alterar o código do controlador ou criar decoradores, o que dificulta a manutenção.

\n\n

O MediatR resolve esse problema introduzindo o conceito de mediador. Os componentes do sistema (por exemplo, controladores) não se comunicam mais diretamente. Em vez disso, eles enviam solicitações (Request) ou comandos (Command) através do MediatR. A biblioteca encontra e chama automaticamente o manipulador (Handler) correspondente.

\n\n

Principais vantagens do uso do MediatR:

\n
    \n
  • Baixo acoplamento (Loose Coupling): O remetente da solicitação não sabe nada sobre o destinatário. Ele conhece apenas o tipo da solicitação.
  • \n
  • Princípio da Responsabilidade Única (SRP): Cada manipulador é responsável por apenas uma ação (por exemplo, "Criar usuário", "Obter lista de pedidos").
  • \n
  • Simplificação do CQRS: O MediatR é ideal para separar comandos (que alteram o estado) de consultas (que leem o estado).
  • \n
  • Pipeline de Comportamentos (Pipeline Behaviors): Você pode adicionar facilmente funcionalidades transversais (logging, validação, transações) sem alterar o código dos manipuladores.
  • \n
  • Testabilidade: É fácil testar manipuladores isoladamente, bem como substituir sua implementação.
  • \n
\n\n

Instalação do MediatR

\n

O MediatR é distribuído via NuGet. Pode ser instalado de várias maneiras:

\n\n

1. Através do .NET CLI (método recomendado)

\n

Abra o terminal na raiz do seu projeto e execute o comando:

\n
dotnet add package MediatR
\n

Você também precisará do pacote para injeção de dependência (DI), se estiver usando ASP.NET Core:

\n
dotnet add package MediatR.Extensions.Microsoft.DependencyInjection
\n\n

2. Através do Package Manager Console (Visual Studio)

\n
Install-Package MediatR\nInstall-Package MediatR.Extensions.Microsoft.DependencyInjection
\n\n

3. Através da Interface do Gerenciador de Pacotes NuGet

\n

No Visual Studio: Tools → NuGet Package Manager → Manage NuGet Packages for Solution.... Procure por "MediatR" e instale ambos os pacotes.

\n\n

Início rápido com exemplo de código

\n

Vamos criar um exemplo simples: enviar uma saudação para o usuário.

\n\n

Passo 1: Crie o projeto

\n

Crie um novo projeto de console ou um projeto ASP.NET Core Web API.

\n\n

Passo 2: Defina a Solicitação (Request)

\n

Crie uma classe que representará a solicitação. Ela deve implementar a interface IRequest<TResponse>, onde TResponse é o tipo do valor de retorno.

\n
using MediatR;\n\npublic class PingRequest : IRequest<string>\n{\n    public string Message { get; set; } = "Ping";\n}
\n\n

Passo 3: Crie o Manipulador (Handler)

\n

Crie uma classe que implemente a interface IRequestHandler<TRequest, TResponse>.

\n
using MediatR;\nusing System.Threading;\nusing System.Threading.Tasks;\n\npublic class PingHandler : IRequestHandler<PingRequest, string>\n{\n    public Task<string                    

Recommendations