MediatR para C# (.NET): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es MediatR y para qué sirve?

\n\n

MediatR es una biblioteca ligera pero potente para .NET que implementa el patrón Mediator (Mediador). En el mundo del desarrollo de software, especialmente en aplicaciones construidas sobre la arquitectura CQRS (Command Query Responsibility Segregation — separación de responsabilidades en comandos y consultas), MediatR se ha convertido en el estándar de facto.

\n\n

¿Para qué sirve?

\n

En la arquitectura clásica, cuando una clase (por ejemplo, un controlador) quiere ejecutar una acción en otra clase (por ejemplo, un servicio), debe conocer la existencia de ese servicio y su interfaz. Esto crea un acoplamiento fuerte (tight coupling). Si desea agregar registro de eventos (logging), validación o almacenamiento en caché antes de llamar al servicio, tendrá que modificar el código del controlador o crear decoradores, lo que dificulta el mantenimiento.

\n\n

MediatR resuelve este problema introduciendo el concepto de mediador. Los componentes del sistema (por ejemplo, controladores) ya no se comunican directamente. En su lugar, envían solicitudes (Request) o comandos (Command) a través de MediatR. La biblioteca encuentra y llama automáticamente al controlador (Handler) correspondiente.

\n\n

Ventajas clave de usar MediatR:

\n
    \n
  • Bajo acoplamiento (Loose Coupling): El remitente de la solicitud no sabe nada sobre el receptor. Solo conoce el tipo de solicitud.
  • \n
  • Principio de responsabilidad única (SRP): Cada controlador es responsable de una sola acción (por ejemplo, "Crear usuario", "Obtener lista de pedidos").
  • \n
  • Simplificación de CQRS: MediatR es ideal para separar comandos (que cambian el estado) y consultas (que leen el estado).
  • \n
  • Cadenas de comportamiento (Pipeline Behaviors): Puede agregar fácilmente funcionalidad transversal (registro de eventos, validación, transacciones) sin modificar el código de los controladores.
  • \n
  • Capacidad de prueba: Es fácil probar los controladores de forma aislada y también reemplazar su implementación.
  • \n
\n\n

Instalación de MediatR

\n

MediatR se distribuye a través de NuGet. Se puede instalar de varias maneras:

\n\n

1. A través de .NET CLI (método recomendado)

\n

Abra una terminal en la raíz de su proyecto y ejecute el comando:

\n
dotnet add package MediatR
\n

También necesitará el paquete para la inyección de dependencias (DI) si usa ASP.NET Core:

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

2. A través de Package Manager Console (Visual Studio)

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

3. A través de la interfaz de usuario de NuGet Package Manager

\n

En Visual Studio: Tools → NuGet Package Manager → Manage NuGet Packages for Solution.... Busque "MediatR" e instale ambos paquetes.

\n\n

Inicio rápido con un ejemplo de código

\n

Vamos a crear un ejemplo simple: enviar un saludo a un usuario.

\n\n

Paso 1: Cree un proyecto

\n

Cree un nuevo proyecto de consola o un proyecto ASP.NET Core Web API.

\n\n

Paso 2: Defina la Solicitud (Request)

\n

Cree una clase que represente la solicitud. Debe implementar la interfaz IRequest<TResponse>, donde TResponse es el tipo de valor de retorno.

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

Paso 3: Cree el Controlador (Handler)

\n

Cree una clase que implemente la interfaz 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