
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:

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
Dim builder = WebApplication.CreateBuilder(args)
' Add MediatR to the service container
builder.Services.AddMediatR(GetType(Program).Assembly)
' Build the web application
Dim 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 de 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
Implements IRequest(Of Integer)
Public Property Name() As String
Public Property Email() As String
Public Property Id() As Integer
End ClassEn este ejemplo, la clase CreateUserCommand implementa la interfaz IRequest<int>, indicando que esta solicitud espera una respuesta entera, que podría representar la ID del usuario creado.
A continuación, necesitas crear un controlador para esta solicitud. Dentro de cada controlador, 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
Implements IRequestHandler(Of CreateUserCommand, Integer)
Public Async Function Handle(ByVal command As CreateUserCommand, ByVal token As CancellationToken) As Task(Of Integer)
' 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
End Function
End ClassUtilizació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
Inherits ControllerBase
Private ReadOnly _mediator As IMediator
Public Sub New(ByVal mediator As IMediator)
_mediator = mediator
End Sub
<HttpPost>
Public Async Function Create(ByVal command As CreateUserCommand) As Task(Of ActionResult(Of Integer))
Dim userId = Await _mediator.Send(command)
Return CreatedAtRoute("GetUser", New With {Key .id = userId}, command)
End Function
End ClassEn 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");
}
}Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End ClassEjemplo 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.");
}
}Imports IronPdf
Public Class PdfGenerator
Public Sub CreatePdfWithMediaInfo(ByVal htmlContent As String)
' Insert your License Key here if required
License.LicenseKey = "License-Key"
' Initialize the HtmlToPdf renderer
Dim renderer = New ChromePdfRenderer()
' Create an HTML template with media information
Dim htmlTemplate As String = $"
<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
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate)
pdfDocument.SaveAs("MediaInformation.pdf")
End Sub
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Example HTML content with MediatR information
Dim htmlContent As String = "
<div>
<h2>MediatR Information</h2>
<p>MediatR is a media tracking system...</p>
</div>"
' Create an instance of PdfGenerator
Dim pdfGenerator As New PdfGenerator()
' Call the CreatePdfWithMediaInfo method to generate the PDF
pdfGenerator.CreatePdfWithMediaInfo(htmlContent)
Console.WriteLine("PDF generated successfully.")
End Sub
End ClassEn 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, el licenciamiento de IronPDF comienza desde $999, ofreciendo una solución robusta para los desarrolladores .NET que buscan ampliar las funcionalidades de su aplicación.

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.
Artículos Relacionados


