Ir para o conteúdo do rodapé
AJUDA DO .NET

Mediatr C# (Como funciona para desenvolvedores)

MediatR é uma biblioteca .NET popular que implementa o padrão Mediator, permitindo que objetos se comuniquem entre si por meio de um mediador, em vez de diretamente. Essa abordagem é particularmente útil em aplicações onde se deseja manter um baixo nível de acoplamento entre os componentes. Neste artigo, analisaremos detalhadamente o MediatR no contexto do desenvolvimento em C#, fornecendo exemplos práticos e orientações sobre como integrá-lo aos seus projetos de aplicativos web. Também exploraremos a biblioteca IronPDF para funcionalidades de PDF em aplicações .NET , visando a integração de funcionalidades de PDF em projetos ASP.NET Core .

Introdução ao padrão Mediator e MediatR

Mediatr C# (Como funciona para desenvolvedores): Figura 1 - MediatR e o padrão Mediator

O padrão Mediator é um padrão de projeto de software que facilita a interação entre objetos de uma maneira que reduz as dependências diretas entre eles, promovendo o baixo acoplamento. O MediatR oferece uma implementação de mediador descomplicada, focada na simplicidade e eficiência para facilitar a comunicação entre objetos.

No cerne da biblioteca MediatR está o conceito de requisições e múltiplos manipuladores. No ponto de solicitação, um objeto encapsula os detalhes da operação ou ação, aguardando processamento pelo mecanismo MediatR. Cada requisição é tratada por um manipulador ou método de tratamento correspondente, que contém a lógica de negócios para executar a requisição. Essa estrutura é particularmente útil para implementar o padrão CQRS (Command Query Responsibility Segregation), onde a separação das operações de leitura e escrita pode levar a arquiteturas de software mais fáceis de manter e escaláveis.

Instalando o MediatR em um projeto .NET Core usando o Console do Gerenciador de Pacotes

Para começar a usar o MediatR em um projeto ASP.NET Core , primeiro você precisa instalar o pacote MediatR. Isso pode ser feito através do Console do Gerenciador de Pacotes no Visual Studio com o seguinte comando:

Install-Package MediatR

Mediatr C# (Como funciona para desenvolvedores): Figura 2 - Instalar MediatR

Após instalar o pacote, é necessário adicionar o MediatR ao contêiner de injeção de dependência do ASP.NET Core . Normalmente, isso é feito no arquivo Program.cs ou Startup.cs do seu projeto de aplicação web, dependendo da versão do ASP.NET Core que você está usando. Eis como você pode fazer isso em um programa com uma camada de apresentação 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();
' 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()
$vbLabelText   $csharpLabel

Na classe do programa, var builder = WebApplication.CreateBuilder(args); inicializa a aplicação web, preparando o terreno para a integração com o MediatR.

Criando sua primeira solicitação e manipulador do MediatR

As requisições do MediatR são classes simples que representam os dados necessários para realizar uma operação específica. Aqui está um exemplo de uma classe de requisição que representa um comando para criar um novo usuário.

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
$vbLabelText   $csharpLabel

Neste exemplo, a classe CreateUserCommand implementa a interface IRequest. interface, indicando que esta solicitação espera uma resposta do tipo inteiro, que pode representar o ID do usuário criado.

Em seguida, você precisa criar um manipulador para esta solicitação. Dentro de cada manipulador, o método Handle é onde a lógica da solicitação é executada:

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
    }
}
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 Class
$vbLabelText   $csharpLabel

Utilizando o MediatR em sua aplicação

Seguindo o mesmo processo usado na configuração do MediatR, você o integra ao fluxo de trabalho do seu aplicativo. Isso geralmente é feito por meio de um controlador ou endpoint em uma aplicação ASP.NET Core . Aqui está um exemplo usando um 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);
    }
}
<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
$vbLabelText   $csharpLabel

Neste controlador, o método de ação Create envia o CreateUserCommand para MediatR chamando _mediator.Send(command). O MediatR então encontra o manipulador apropriado para esse comando e o executa. O resultado é retornado e usado para gerar uma resposta no mesmo processo.

Além das solicitações básicas: notificações e comportamentos

O MediatR também oferece suporte a notificações e comportamentos. As notificações são mensagens às quais vários manipuladores podem se inscrever e processar, permitindo uma abordagem mais orientada a eventos em sua aplicação. Os comportamentos, por outro lado, são semelhantes a um middleware para suas solicitações do MediatR, permitindo que você implemente preocupações transversais, como registro de logs, validação ou gerenciamento de transações.

Introdução à Biblioteca IronPDF

Mediatr C# (Como funciona para desenvolvedores): Figura 3 - IronPDF

IronPDF é uma biblioteca C# projetada para desenvolvedores .NET que precisam de uma maneira simples de criar, editar e trabalhar com arquivos PDF em seus aplicativos, sem se preocupar com a gravação. Os desenvolvedores podem gerar PDFs sem recorrer a APIs complexas, simplesmente convertendo páginas da web ou código HTML diretamente para o formato PDF . O IronPDF não se limita apenas à criação de PDFs; Ele também oferece recursos para edição de PDFs, como adicionar texto, imagens e páginas, ou até mesmo preencher e editar formulários dentro de documentos PDF. Os desenvolvedores podem trabalhar de forma abrangente com PDFs, incluindo tarefas como mesclar, dividir e proteger arquivos PDF com senhas e permissões.

O IronPDF é especializado na conversão de HTML para PDF, preservando com precisão os layouts e estilos originais. Isso o torna ideal para gerar PDFs a partir de conteúdo da web, como relatórios, faturas e documentação. Ele suporta a conversão de arquivos HTML, URLs e até mesmo strings HTML brutas em arquivos 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");
    }
}
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 Class
$vbLabelText   $csharpLabel

Exemplo de código

Neste exemplo, vamos supor que a solicitação MediatR se refere a algum tipo de conteúdo de mídia ou metadados que desejamos incluir em nosso PDF. Como o MediatR não está diretamente relacionado à funcionalidade do IronPDF, vamos abordar isso criando um documento PDF a partir de conteúdo HTML que inclua informações de mídia ou referências, como um ótimo ponto 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>

                {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>

                {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(htmlContent As String)
        ' Insert your License Key here if required
        License.LicenseKey = "License-Key"

        ' Initialize the HtmlToPdf renderer
        Dim renderer As 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>

                {htmlContent}
            </body>
            </html>"

        ' Convert the HTML string to a PDF document
        Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlTemplate)
        pdfDocument.SaveAs("MediaInformation.pdf")
    End Sub
End Class

Module Program
    Sub Main(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 Module
$vbLabelText   $csharpLabel

Neste trecho de código, htmlContent é uma variável que deve conter as informações da sua mídia em formato HTML. Isso pode incluir texto, imagens, links para vídeos ou qualquer outro conteúdo compatível com HTML. O IronPDF converterá esse conteúdo HTML em um documento PDF, preservando o layout e a formatação especificados no HTML.

Mediatr C# (Como funciona para desenvolvedores): Figura 4 - Saída em PDF

Conclusão

Mediatr C# (Como funciona para desenvolvedores): Figura 5 - Licenciamento

Seguindo os passos descritos neste artigo, você terá agora uma base sólida para incorporar o MediatR em seus projetos, desde o tratamento básico de comandos e consultas até o aproveitamento de recursos mais avançados, como notificações e comportamentos. À medida que sua aplicação cresce e evolui, o MediatR oferece ferramentas e padrões que podem ajudar a manter seu código limpo, de fácil manutenção e escalável.

Para concluir, vale ressaltar que explorar e integrar diferentes bibliotecas e ferramentas, como o IronPDF, pode aprimorar ainda mais seus projetos .NET . O IronPDF oferece um período de teste gratuito de recursos avançados de PDF . Para projetos que exigem recursos avançados de PDF, o licenciamento do IronPDF começa em $799, oferecendo uma solução robusta para desenvolvedores .NET que desejam expandir as funcionalidades de seus aplicativos.

Perguntas frequentes

Como o MediatR pode ser integrado em projetos ASP.NET Core?

Para integrar o MediatR em um projeto ASP.NET Core, adicione-o ao contêiner de injeção de dependência no seu arquivo Program.cs ou Startup.cs. Você pode instalá-lo usando o Console do Gerenciador de Pacotes com o comando: Install-Package MediatR .

Qual o papel das requisições e dos manipuladores no MediatR?

Em MediatR, as requisições encapsulam os detalhes de uma operação, e os manipuladores processam essas requisições executando a lógica de negócios necessária. Isso suporta o padrão de Segregação de Responsabilidades de Comando e Consulta (CQRS), aprimorando a capacidade de manutenção das aplicações.

Como as notificações e os comportamentos aprimoram o MediatR?

As notificações no MediatR permitem que vários manipuladores reajam a uma única mensagem, promovendo uma abordagem orientada a eventos. Os comportamentos funcionam como middleware para lidar com questões transversais, como registro de logs, validação e tratamento de exceções.

Quais são os benefícios de usar o padrão Mediator em aplicações .NET?

O padrão Mediator, implementado pelo MediatR, reduz as dependências diretas entre os componentes, promovendo o baixo acoplamento. Isso melhora a capacidade de manutenção e a escalabilidade de aplicações .NET, seguindo os princípios da arquitetura limpa.

Como converter HTML para PDF em aplicações .NET?

O IronPDF permite a conversão de HTML para PDF em aplicações .NET. Você pode usar o método RenderHtmlAsPdf para converter strings HTML ou RenderUrlAsPdf para URLs, garantindo que o layout seja preservado no PDF resultante.

Quais recursos avançados o IronPDF oferece para gerenciamento de PDFs?

O IronPDF oferece recursos avançados de gerenciamento de PDFs, como mesclagem, divisão, edição e proteção com senhas e permissões. Essas funcionalidades são ideais para tarefas como geração de relatórios, faturas e outros documentos.

Como o MediatR suporta o padrão CQRS?

O MediatR suporta o padrão CQRS ao separar a lógica que lida com solicitações de comandos das consultas. Essa separação permite um código mais escalável e de fácil manutenção, já que cada tipo de operação pode ser otimizado e gerenciado de forma independente.

Quais são as vantagens de usar o IronPDF em projetos .NET?

O IronPDF oferece uma API fácil de usar para criar, editar e gerenciar arquivos PDF em projetos .NET. Sua capacidade de converter HTML em PDF, preservando o layout, o torna uma ferramenta poderosa para gerar relatórios e documentos.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim