AYUDA .NET

Mediatr C# (Cómo funciona para desarrolladores)

Actualizado 29 de abril, 2024
Compartir:

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 hacerlo directamente. Este enfoque es especialmente útil en aplicaciones en las que se desea mantener un bajo nivel de acoplamiento entre los componentes. En este artículo, examinaremos en detalle MediatR en el contexto del desarrollo en C#, proporcionando ejemplos prácticos y orientación sobre cómo integrarlo en sus proyectos de aplicaciones web. También exploraremos la Biblioteca IronPDF para la integración de funcionalidades PDF en proyectos ASP.NET Core.

Introducción al patrón mediador y a MediatR

Mediatr C# (Cómo funciona para los desarrolladores): Figura 1 - MediatR y el patrón mediador

El patrón mediador es un patrón de diseño de software que facilita la interacción entre objetos de forma que se reducen las dependencias directas entre ellos, promoviendo el acoplamiento flexible. MediatR proporciona una implementación de mediador poco ambiciosa, centrada en la simplicidad y la eficiencia a la hora de facilitar la comunicación entre objetos.

En el corazón de la biblioteca MediatR se encuentra el concepto de peticiones y múltiples gestores. En el punto de solicitud, un objeto encapsula los detalles de la operación o acción, a la espera de ser procesados por el mecanismo MediatR. Cada solicitud es manejada por un correspondiente manejador o método handle, que contiene la lógica de negocio para ejecutar la solicitud. Esta estructura es especialmente útil para implementar la segregación de responsabilidades de consulta de comandos (CQRS) donde la separación de las operaciones de lectura y escritura puede dar lugar a arquitecturas de software más fáciles de mantener y escalables.

Instalación de MediatR en un proyecto .NET Core mediante la consola del gestor de paquetes

Para empezar a utilizar MediatR en un proyecto ASP.NET Core, primero debe instalar el paquete MediatR. Esto se puede hacer a través de la consola del gestor de paquetes en Visual Studio con el siguiente comando:

Install-Package MediatR

Mediatr C# (Cómo funciona para desarrolladores): Figura 2 - Instalar MediatR

Después de instalar el paquete, es necesario añadir MediatR al contenedor de inyección de dependencias de ASP.NET Core. Esto se hace normalmente en el archivo Program.cs o Startup.cs de su proyecto de aplicación web, dependiendo de la versión de ASP.NET Core que esté utilizando. He aquí cómo hacerlo en un programa con una capa de presentación API mínima.

//  escribir código
var builder = WebApplication.CreateBuilder(args);
//  Añadir MediatR
builder.Services.AddMediatR(typeof(Program).Assembly);
var app = builder.Build();
//  escribir código
var builder = WebApplication.CreateBuilder(args);
//  Añadir MediatR
builder.Services.AddMediatR(typeof(Program).Assembly);
var app = builder.Build();
'  escribir código
Dim builder = WebApplication.CreateBuilder(args)
'  Añadir MediatR
builder.Services.AddMediatR(GetType(Program).Assembly)
Dim app = builder.Build()
VB   C#

En la clase de programa, **var builder = WebApplication.CreateBuilder(args)Ÿ Inicializa la aplicación web, preparando el escenario para la integración de MediatR.

Creación de la primera solicitud y del primer gestor de MediatR

Las peticiones MediatR son clases simples como public class emailhandler que representan los datos necesarios para realizar una operación específica. A continuación se muestra un ejemplo de una clase pública 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;}
}
Public Class CreateUserCommand
	Implements IRequest(Of Integer)

	Public Property Name() As String
	Public Property Email() As String
	Public Property id() As Integer
End Class
VB   C#

En este ejemplo, la clase CreateUserCommand implementa la función IRequest, indicando que esta petición espera una respuesta entera, que podría representar el ID del usuario creado.

A continuación, necesitas crear un manejador para esta petición. Dentro de cada manejador, el método public async Task Handle es el núcleo donde se ejecuta la lógica de la solicitud:

public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
    public async Task<int> Handle(CreateUserCommand command, CancellationToken token)
    {
        //  Implementar lógica para crear usuario aquí
        //  Para este ejemplo, supongamos que creamos un usuario y le devolvemos el ID
        return await Task.FromResult(1); //  Supongamos que el ID del usuario es 1
    }
}
public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
    public async Task<int> Handle(CreateUserCommand command, CancellationToken token)
    {
        //  Implementar lógica para crear usuario aquí
        //  Para este ejemplo, supongamos que creamos un usuario y le devolvemos el ID
        return await Task.FromResult(1); //  Supongamos que el ID del usuario es 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)
		'  Implementar lógica para crear usuario aquí
		'  Para este ejemplo, supongamos que creamos un usuario y le devolvemos el ID
		Return Await Task.FromResult(1) '  Supongamos que el ID del usuario es 1
	End Function
End Class
VB   C#

Utilización de MediatR en su aplicación

Siguiendo el mismo proceso utilizado para configurar MediatR, podrá integrarlo en el flujo de trabajo de su aplicación. Esto se hace normalmente a través de un controlador o endpoint en una aplicación ASP.NET Core. He aquí un ejemplo utilizando un controlador 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);
    }
}
<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 Class
VB   C#

En este controlador, el método de acción Create envía el comando CreateUserCommand a MediatR llamando a _mediator.Send(comando). A continuación, MediatR busca el gestor 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 admite notificaciones y comportamientos. Las notificaciones son mensajes a los que se pueden suscribir y manejar múltiples manejadores, lo que permite un enfoque más orientado a eventos dentro de su aplicación. Los comportamientos, por su parte, se asemejan a un middleware para sus solicitudes MediatR, permitiéndole implementar aspectos transversales como el registro, la validación o la gestión de transacciones.

Introducción a la biblioteca IronPDF

Mediatr C# (Cómo funciona para desarrolladores): Figura 3 - 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 problemas de escritura. Los desarrolladores pueden generar archivos PDF sin necesidad de recurrir a complejas API, simplemente convirtiendo páginas web o Código HTML directamente en formato PDF. IronPDF no se limita a crear archivos PDF; también ofrece funciones para editar PDF, como añadir texto, imágenes y páginas, o incluso rellenar y editar formularios dentro de documentos PDF. Los desarrolladores pueden trabajar de forma exhaustiva con archivos PDF, incluyendo tareas como combinar, dividir y proteger archivos PDF con contraseñas y permisos.

Ejemplo de código

En este ejemplo, supongamos que la solicitud de 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, abordaremos este tema creando un documento PDF a partir de contenido HTML que incluya información multimedia o referencias como un buen punto de partida.

using IronPdf;
public class PdfGenerator
{
    public void CreatePdfWithMediaInfo(string htmlContent)
    {
        License.LicenseKey = "License-Key";
        //  Inicializar el renderizador HtmlToPdf
        var renderer = new ChromePdfRenderer();
        //  Ejemplo de contenido HTML - sustitúyalo por su contenido HTML real
        //  Aquí, "htmlContent" debe incluir su información MediatR en formato HTML
        string htmlTemplate = $@"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>";
        //  Convertir cadena HTML a PDF
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate);
        pdfDocument.SaveAs("MediaInformation.pdf");
    }
}
class Program
{
    static void Main(string [] args)
    {
        //  Ejemplo de contenido HTML con información sobre MediatR
        string htmlContent = @"
            <div>
                <h2>MediaTR Information</h2>
                <p>MediaTR is a media tracking system...</p>
            </div>";
        //  Crear una instancia de PdfGenerator
        PdfGenerator pdfGenerator = new PdfGenerator();
        //  Llame al método CreatePdfWithMediaInfo para generar el PDF
        pdfGenerator.CreatePdfWithMediaInfo(htmlContent);
        Console.WriteLine("PDF generated successfully.");
    }
}
using IronPdf;
public class PdfGenerator
{
    public void CreatePdfWithMediaInfo(string htmlContent)
    {
        License.LicenseKey = "License-Key";
        //  Inicializar el renderizador HtmlToPdf
        var renderer = new ChromePdfRenderer();
        //  Ejemplo de contenido HTML - sustitúyalo por su contenido HTML real
        //  Aquí, "htmlContent" debe incluir su información MediatR en formato HTML
        string htmlTemplate = $@"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>";
        //  Convertir cadena HTML a PDF
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate);
        pdfDocument.SaveAs("MediaInformation.pdf");
    }
}
class Program
{
    static void Main(string [] args)
    {
        //  Ejemplo de contenido HTML con información sobre MediatR
        string htmlContent = @"
            <div>
                <h2>MediaTR Information</h2>
                <p>MediaTR is a media tracking system...</p>
            </div>";
        //  Crear una instancia de PdfGenerator
        PdfGenerator pdfGenerator = new PdfGenerator();
        //  Llame al método CreatePdfWithMediaInfo para generar el PDF
        pdfGenerator.CreatePdfWithMediaInfo(htmlContent);
        Console.WriteLine("PDF generated successfully.");
    }
}
Imports IronPdf
Public Class PdfGenerator
	Public Sub CreatePdfWithMediaInfo(ByVal htmlContent As String)
		License.LicenseKey = "License-Key"
		'  Inicializar el renderizador HtmlToPdf
		Dim renderer = New ChromePdfRenderer()
		'  Ejemplo de contenido HTML - sustitúyalo por su contenido HTML real
		'  Aquí, "htmlContent" debe incluir su información MediatR en formato HTML
		Dim htmlTemplate As String = $"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>"
		'  Convertir cadena HTML a PDF
		Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate)
		pdfDocument.SaveAs("MediaInformation.pdf")
	End Sub
End Class
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		'  Ejemplo de contenido HTML con información sobre MediatR
		Dim htmlContent As String = "
            <div>
                <h2>MediaTR Information</h2>
                <p>MediaTR is a media tracking system...</p>
            </div>"
		'  Crear una instancia de PdfGenerator
		Dim pdfGenerator As New PdfGenerator()
		'  Llame al método CreatePdfWithMediaInfo para generar el PDF
		pdfGenerator.CreatePdfWithMediaInfo(htmlContent)
		Console.WriteLine("PDF generated successfully.")
	End Sub
End Class
VB   C#

En este fragmento de código, htmlContent es una variable que debe contener la información multimedia en formato HTML. Puede incluir texto, imágenes, enlaces a vídeos o cualquier otro contenido compatible con HTML. IronPDF convertirá este contenido HTML en un documento PDF, conservando el diseño y el formato especificados en el HTML.

Mediatr C# (Cómo funciona para desarrolladores): Figura 4 - Salida PDF

Conclusión

Mediatr C# (Cómo funciona para los desarrolladores): Figura 5 - Licencias

Siguiendo los pasos descritos en este artículo, ahora deberías tener una base sólida para incorporar MediatR en tus proyectos, empezando por la gestión básica de comandos y consultas hasta aprovechar las funciones más avanzadas como las notificaciones y los comportamientos. A medida que su aplicación crece y evoluciona, MediatR ofrece herramientas y patrones que pueden ayudar a mantener su código base limpio, mantenible y escalable.

Para concluir, cabe señalar que explorar e integrar distintas bibliotecas y herramientas, como IronPDF, puede mejorar aún más sus proyectos .NET. IronPDF ofrece un prueba gratuita. Para proyectos que requieran funciones avanzadas de PDF, las licencias de IronPDF comienzan a partir de 749 dólares, lo que ofrece una solución sólida para desarrolladores .NET que buscan ampliar las funcionalidades de sus aplicaciones.

< ANTERIOR
Resharper C# (Cómo funciona para desarrolladores)
SIGUIENTE >
Avalonia C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123