Mediatr C# (Cómo Funciona para Desarrolladores)
MediatR es una popular biblioteca .NET que implementa el patrón mediador, permitiendo que los objetos se comuniquen entre sí a través de un mediador, en lugar de directamente. Este enfoque es particularmente útil en aplicaciones donde es deseable mantener un bajo nivel de acoplamiento entre los componentes. En este artículo, realizaremos un examen detallado de MediatR en el contexto del desarrollo en C#, proporcionando ejemplos prácticos y guías sobre cómo integrarlo en tus proyectos de aplicaciones web. También exploraremos la biblioteca IronPDF para funcionalidades PDF en aplicaciones .NET para la integración de funcionalidades PDF en proyectos ASP.NET Core.
Introducción al patrón mediador y MediatR

El patrón mediador es un patrón de diseño de software que facilita la interacción entre objetos de una manera que reduce las dependencias directas entre ellos, promoviendo un acoplamiento débil. MediatR proporciona una implementación de mediador sin pretensiones, centrándose en la simplicidad y la eficiencia en facilitar la comunicación entre objetos.
En el corazón de la biblioteca MediatR está el concepto de solicitudes y múltiples manejadores. En el punto de solicitud, un objeto encapsula los detalles de la operación o acción, esperando ser procesado por el mecanismo de MediatR. Cada solicitud es manejada por un manejador o método de manejo correspondiente, que contiene la lógica de negocio para ejecutar la solicitud. Esta estructura es particularmente útil para implementar el patrón de Separación de Responsabilidades de Consultas y Comandos (CQRS), donde la separación de operaciones de lectura y escritura puede llevar a arquitecturas de software más mantenibles y escalables.
Instalación de MediatR en un proyecto .NET Core mediante la consola del gestor de paquetes
Para comenzar a usar MediatR en un proyecto ASP.NET Core, primero necesitas instalar el paquete MediatR. Esto se puede hacer a través de la Consola del Administrador de Paquetes en Visual Studio con el siguiente comando:
Install-Package MediatR

Después de instalar el paquete, es necesario agregar MediatR al contenedor de inyección de dependencia de ASP.NET Core. Esto se hace típicamente en el archivo Program.cs o Startup.cs de tu proyecto de aplicación web, dependiendo de la versión de ASP.NET Core que estés utilizando. Aquí te mostramos cómo hacerlo en un programa con una capa de presentación de API mínima.
// Initialize a new web application
var builder = WebApplication.CreateBuilder(args);
// Add MediatR to the service container
builder.Services.AddMediatR(typeof(Program).Assembly);
// Build the web application
var app = builder.Build();// Initialize a new web application
var builder = WebApplication.CreateBuilder(args);
// Add MediatR to the service container
builder.Services.AddMediatR(typeof(Program).Assembly);
// Build the web application
var app = builder.Build();En la clase del programa, var builder = WebApplication.CreateBuilder(args); inicializa la aplicación web, preparando el escenario para la integración con MediatR.
Crear su primera solicitud y gestor de MediatR
Las solicitudes de MediatR son clases simples que representan los datos necesarios para realizar una operación específica. Aquí tienes un ejemplo de una clase de solicitud que representa un comando para crear un nuevo usuario.
public class CreateUserCommand : IRequest<int>
{
public string Name { get; set; }
public string Email { get; set; }
public int Id { get; set; }
}public class CreateUserCommand : IRequest<int>
{
public string Name { get; set; }
public string Email { get; set; }
public int Id { get; set; }
}En este ejemplo, la clase CreateUserCommand implementa la interfaz IRequest
A continuación, necesitas crear un manejador para esta solicitud. Dentro de cada manejador, el método Handle es donde se ejecuta la lógica de la solicitud:
public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
public async Task<int> Handle(CreateUserCommand command, CancellationToken token)
{
// Implement logic to create a user here
// For this example, let's pretend we create a user and return the ID
return await Task.FromResult(1); // Assume the user's ID is 1
}
}public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
public async Task<int> Handle(CreateUserCommand command, CancellationToken token)
{
// Implement logic to create a user here
// For this example, let's pretend we create a user and return the ID
return await Task.FromResult(1); // Assume the user's ID is 1
}
}Utilización de MediatR en su aplicación
Siguiendo el mismo proceso utilizado para configurar MediatR, lo integras dentro del flujo de trabajo de tu aplicación. Esto se hace típicamente a través de un controlador o punto final en una aplicación ASP.NET Core. Aquí tienes un ejemplo usando un controlador de API:
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
private readonly IMediator _mediator;
public UsersController(IMediator mediator)
{
_mediator = mediator;
}
[HttpPost]
public async Task<ActionResult<int>> Create(CreateUserCommand command)
{
var userId = await _mediator.Send(command);
return CreatedAtRoute("GetUser", new { id = userId }, command);
}
}[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
private readonly IMediator _mediator;
public UsersController(IMediator mediator)
{
_mediator = mediator;
}
[HttpPost]
public async Task<ActionResult<int>> Create(CreateUserCommand command)
{
var userId = await _mediator.Send(command);
return CreatedAtRoute("GetUser", new { id = userId }, command);
}
}En este controlador, el método de acción Create envía el CreateUserCommand a MediatR llamando a _mediator.Send(command). MediatR encuentra entonces el manejador apropiado para este comando y lo ejecuta. El resultado se devuelve y se utiliza para generar una respuesta en el mismo proceso.
Más allá de las peticiones básicas: Notificaciones y comportamientos
MediatR también soporta notificaciones y comportamientos. Las notificaciones son mensajes a los que múltiples manejadores pueden suscribirse y manejar, permitiendo un enfoque más orientado a eventos dentro de tu aplicación. Los comportamientos, por otro lado, son similares a middleware para tus solicitudes MediatR, permitiéndote implementar preocupaciones transversales como registro, validación o gestión de transacciones.
Introducción a la biblioteca IronPDF

IronPDF es una biblioteca C# diseñada para desarrolladores .NET que necesitan una forma sencilla de crear, editar y trabajar con archivos PDF en sus aplicaciones sin preocupaciones de escritura. Los desarrolladores pueden generar PDFs sin participar con APIs complejas simplemente convirtiendo páginas web o código HTML directamente en formato PDF. IronPDF no se limita solo a crear PDFs; también ofrece características para editar PDFs, como añadir texto, imágenes y páginas, o incluso completar y editar formularios dentro de documentos PDF. Los desarrolladores pueden trabajar de manera exhaustiva con PDFs, incluyendo tareas como fusionar, dividir y asegurar archivos PDF con contraseñas y permisos.
IronPDF se especializa en la conversión de HTML a PDF preservando los diseños y estilos originales con precisión. Esto lo hace ideal para generar PDFs desde contenido basado en la web como informes, facturas y documentación. Admite la conversión de archivos HTML, URLs e incluso cadenas HTML en bruto a archivos PDF.
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}Ejemplo de código
En este ejemplo, asumamos que una solicitud MediatR se refiere a algún tipo de contenido multimedia o metadatos que queremos incluir en nuestro PDF. Dado que MediatR no está directamente relacionado con la funcionalidad de IronPDF, lo abordaremos creando un documento PDF a partir de contenido HTML que incluya información o referencias de medios como un excelente punto de partida.
using IronPdf;
public class PdfGenerator
{
public void CreatePdfWithMediaInfo(string htmlContent)
{
// Insert your License Key here if required
License.LicenseKey = "License-Key";
// Initialize the HtmlToPdf renderer
var renderer = new ChromePdfRenderer();
// Create an HTML template with media information
string htmlTemplate = $@"
<html>
<head>
<title>Media Information</title>
</head>
<body>
<h1>Media Details</h1>
<!-- Insert your media information here -->
{htmlContent}
</body>
</html>";
// Convert the HTML string to a PDF document
var pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate);
pdfDocument.SaveAs("MediaInformation.pdf");
}
}
class Program
{
static void Main(string[] args)
{
// Example HTML content with MediatR information
string htmlContent = @"
<div>
<h2>MediatR Information</h2>
<p>MediatR is a media tracking system...</p>
</div>";
// Create an instance of PdfGenerator
PdfGenerator pdfGenerator = new PdfGenerator();
// Call the CreatePdfWithMediaInfo method to generate the PDF
pdfGenerator.CreatePdfWithMediaInfo(htmlContent);
Console.WriteLine("PDF generated successfully.");
}
}using IronPdf;
public class PdfGenerator
{
public void CreatePdfWithMediaInfo(string htmlContent)
{
// Insert your License Key here if required
License.LicenseKey = "License-Key";
// Initialize the HtmlToPdf renderer
var renderer = new ChromePdfRenderer();
// Create an HTML template with media information
string htmlTemplate = $@"
<html>
<head>
<title>Media Information</title>
</head>
<body>
<h1>Media Details</h1>
<!-- Insert your media information here -->
{htmlContent}
</body>
</html>";
// Convert the HTML string to a PDF document
var pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate);
pdfDocument.SaveAs("MediaInformation.pdf");
}
}
class Program
{
static void Main(string[] args)
{
// Example HTML content with MediatR information
string htmlContent = @"
<div>
<h2>MediatR Information</h2>
<p>MediatR is a media tracking system...</p>
</div>";
// Create an instance of PdfGenerator
PdfGenerator pdfGenerator = new PdfGenerator();
// Call the CreatePdfWithMediaInfo method to generate the PDF
pdfGenerator.CreatePdfWithMediaInfo(htmlContent);
Console.WriteLine("PDF generated successfully.");
}
}En este fragmento de código, htmlContent es una variable que debe contener tu información de medios en formato HTML. Esto podría incluir texto, imágenes, enlaces a videos o cualquier otro contenido compatible con HTML. IronPDF convertirá este contenido HTML en un documento PDF, preservando el diseño y formato especificado en el HTML.

Conclusión

Siguiendo los pasos descritos en este artículo, ahora deberías tener una base sólida para incorporar MediatR en tus proyectos, comenzando desde el manejo básico de comandos y consultas hasta el aprovechamiento de características avanzadas como notificaciones y comportamientos. A medida que tu aplicación crece y evoluciona, MediatR ofrece herramientas y patrones que pueden ayudar a mantener tu base de código limpia, mantenible y escalable.
Al concluir, vale la pena mencionar que explorar e integrar diferentes bibliotecas y herramientas, como IronPDF, puede mejorar aún más tus proyectos .NET. IronPDF ofrece una prueba gratuita de características avanzadas de PDF. Para proyectos que requieren características avanzadas de PDF, las licencias de IronPDF comienzan desde $799, ofreciendo una solución robusta para desarrolladores .NET que buscan ampliar las funcionalidades de su aplicación.
Preguntas Frecuentes
¿Cómo se puede integrar MediatR en proyectos de ASP.NET Core?
Para integrar MediatR en un proyecto de ASP.NET Core, agrégalo al contenedor de inyección de dependencias en tu archivo Program.cs o Startup.cs. Puedes instalarlo usando la Consola del Gestor de Paquetes con el comando: Install-Package MediatR.
¿Qué papel juegan las solicitudes y los manejadores en MediatR?
En MediatR, las solicitudes encapsulan los detalles de una operación y los manejadores procesan estas solicitudes ejecutando la lógica de negocio necesaria. Esto apoya el patrón de separación de responsabilidades de consultas y comandos (CQRS), mejorando la mantenibilidad de las aplicaciones.
¿Cómo mejoran las notificaciones y comportamientos a MediatR?
Las notificaciones en MediatR permiten que múltiples manejadores reaccionen a un único mensaje, promoviendo un enfoque orientado a eventos. Los comportamientos funcionan como middleware para manejar preocupaciones transversales como registros, validación y manejo de excepciones.
¿Cuáles son los beneficios de usar el patrón mediador en aplicaciones .NET?
El patrón mediador, implementado por MediatR, reduce las dependencias directas entre componentes, promoviendo un acoplamiento suelto. Esto mejora la mantenibilidad y escalabilidad de las aplicaciones .NET siguiendo principios de arquitectura limpia.
¿Cómo se puede convertir HTML a PDF en aplicaciones .NET?
IronPDF permite la conversión de HTML a PDF en aplicaciones .NET. Puedes usar el método RenderHtmlAsPdf para convertir cadenas HTML o RenderUrlAsPdf para URLs, asegurando que el diseño se preserve en el PDF resultante.
¿Qué características avanzadas ofrece IronPDF para la gestión de PDFs?
IronPDF proporciona características avanzadas para la gestión de PDFs como unir, dividir, editar PDFs y protegerlos con contraseñas y permisos. Estas capacidades son ideales para tareas como generar informes, facturas y otra documentación.
¿Cómo apoya MediatR el patrón CQRS?
MediatR apoya el patrón CQRS al separar la lógica que maneja las solicitudes de comando de las consultas. Esta separación permite un código más escalable y mantenible, ya que cada tipo de operación puede ser optimizado y gestionado de manera independiente.
¿Cuáles son las ventajas de usar IronPDF en proyectos .NET?
IronPDF proporciona una API fácil de usar para crear, editar y gestionar archivos PDF en proyectos .NET. Su capacidad para convertir HTML a PDF manteniendo el diseño lo convierte en una herramienta poderosa para generar informes y documentos.








