Passer au contenu du pied de page
.NET AIDE

Mediatr C# (Comment ça fonctionne pour les développeurs)

MediatR est une bibliothèque .NET populaire qui implémente le modèle médiateur, permettant aux objets de communiquer les uns avec les autres à travers un médiateur, plutôt que directement. Cette approche est particulièrement utile dans les applications où il est souhaitable de maintenir un faible niveau de couplage entre les composants. Dans cet article, nous allons examiner en détail MediatR dans le contexte du développement C#, en fournissant des exemples pratiques et des conseils sur la façon de l'intégrer dans vos projets d'applications web. Nous explorerons également la bibliothèque IronPDF pour les fonctionnalités PDF dans les applications .NET pour l'intégration des fonctionnalités PDF dans les projets ASP.NET Core.

Introduction au modèle médiateur et à MediatR

Mediatr C# (Comment ça marche pour les développeurs) : Figure 1 - MediatR et modèle médiateur

Le modèle médiateur est un modèle de conception logicielle qui facilite l'interaction entre les objets d'une manière qui réduit les dépendances directes entre eux, favorisant un couplage lâche. MediatR fournit une implémentation de médiateur sans prétention, focalisée sur la simplicité et l'efficacité en facilitant la communication entre objets.

Au cœur de la bibliothèque MediatR se trouve le concept de requêtes et de multiples gestionnaires. Au point de requête, un objet encapsule les détails de l'opération ou de l'action, en attente de traitement par le mécanisme MediatR. Chaque requête est traitée par un gestionnaire ou une méthode de gestion correspondante, qui contient la logique métier pour exécuter la requête. Cette structure est particulièrement utile pour implémenter le modèle de séparation des responsabilités entre commande et requête (CQRS), où la séparation des opérations de lecture et d'écriture peut conduire à des architectures logicielles plus maintenables et évolutives.

Installer MediatR dans un projet .NET Core en utilisant la console de gestion des packages

Pour commencer à utiliser MediatR dans un projet ASP.NET Core, vous devez d'abord installer le package MediatR. Cela peut être effectué via la console de gestion des packages dans Visual Studio avec la commande suivante :

Install-Package MediatR

Mediatr C# (Comment ça marche pour les développeurs) : Figure 2 - Installer MediatR

Après avoir installé le package, il est nécessaire d'ajouter MediatR au conteneur d'injection de dépendances ASP.NET Core. Cela se fait généralement dans le fichier Program.cs ou Startup.cs de votre projet d'application web, en fonction de la version d'ASP.NET Core que vous utilisez. Voici comment vous pouvez le faire dans un programme avec une couche de présentation API minimale.

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

Dans la classe du programme, var builder = WebApplication.CreateBuilder(args); initialise l'application web, préparant le terrain pour l'intégration de MediatR.

Créer votre première requête et gestionnaire MediatR

Les requêtes MediatR sont de simples classes qui représentent les données nécessaires à l'exécution d'une opération spécifique. Voici un exemple de classe de requête qui représente une commande pour créer un nouvel utilisateur.

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

Dans cet exemple, la classe CreateUserCommand implémente l'interface IRequest, indiquant que cette requête attend une réponse entière, qui pourrait représenter l'ID de l'utilisateur créé.

Ensuite, vous devez créer un gestionnaire pour cette requête. Dans chaque gestionnaire, la méthode Handle est l'endroit où la logique de la requête est exécutée :

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

Utiliser MediatR dans votre application

En suivant le même processus utilisé pour configurer MediatR, vous l'intégrez dans le flux de travail de votre application. Cela se fait généralement via un contrôleur ou un endpoint dans une application ASP.NET Core. Voici un exemple utilisant un contrôleur 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

Dans ce contrôleur, la méthode d'action Create envoie la CreateUserCommand à MediatR en appelant _mediator.Send(command). MediatR trouve ensuite le gestionnaire approprié pour cette commande et l'exécute. Le résultat est renvoyé et utilisé pour générer une réponse dans le même processus.

Au-delà des requêtes de base : notifications et comportements

MediatR prend également en charge les notifications et les comportements. Les notifications sont des messages auxquels plusieurs gestionnaires peuvent s'abonner et traiter, permettant une approche plus orientée événements au sein de votre application. Les comportements, d'autre part, s'apparentent à des middlewares pour vos requêtes MediatR, vous permettant d'implémenter des préoccupations transversales telles que la journalisation, la validation, ou la gestion des transactions.

Présentation de la Bibliothèque IronPDF

Mediatr C# (Comment ça marche pour les développeurs) : Figure 3 - IronPDF

IronPDF est une bibliothèque C# conçue pour les développeurs .NET qui ont besoin d'un moyen simple de créer, modifier et travailler avec des fichiers PDF dans leurs applications sans préoccupations d'écriture. Les développeurs peuvent générer des PDFs sans se plonger dans des APIs complexes en convertissant simplement des pages web ou du code HTML directement en format PDF. IronPDF ne se limite pas seulement à la création de PDFs ; il offre également des fonctionnalités pour modifier les PDFs, telles que l'ajout de texte, d'images et de pages, ou même remplir et éditer des formulaires dans des documents PDF. Les développeurs peuvent travailler de manière exhaustive avec les PDFs, y compris des tâches comme la fusion, la division et la sécurisation des fichiers PDF avec des mots de passe et des autorisations.

IronPDF se spécialise dans la conversion HTML en PDF en préservant avec précision les mises en page et styles originaux. Cela le rend idéal pour générer des PDFs à partir de contenu web comme des rapports, des factures et de la documentation. Il prend en charge la conversion de fichiers HTML, d'URLs et même de chaînes HTML brutes en fichiers 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

Exemple de code

Dans cet exemple, supposons que la requête MediatR fait référence à une certaine forme de contenu ou de métadonnées média que nous voulons inclure dans notre PDF. Puisque MediatR n'est pas directement lié à la fonctionnalité d'IronPDF, nous aborderons cela en créant un document PDF à partir d'un contenu HTML incluant des informations ou références médias comme un excellent point de départ.

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.");
    }
}
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 Class
$vbLabelText   $csharpLabel

Dans cet extrait de code, htmlContent est une variable qui devrait contenir vos informations médias au format HTML. Cela pourrait inclure du texte, des images, des liens vers des vidéos ou tout autre contenu compatible HTML. IronPDF convertira ce contenu HTML en un document PDF, en préservant la mise en page et le formatage spécifiés dans le HTML.

Mediatr C# (Comment ça marche pour les développeurs) : Figure 4 - Sortie PDF

Conclusion

Mediatr C# (Comment ça marche pour les développeurs) : Figure 5 - Licences

En suivant les étapes décrites dans cet article, vous devriez maintenant avoir une base solide pour incorporer MediatR dans vos projets, en démarrant avec la gestion de commandes et de requêtes de base pour tirer parti des fonctionnalités plus avancées comme les notifications et les comportements. À mesure que votre application grandit et évolue, MediatR offre des outils et des modèles qui peuvent aider à garder votre code propre, maintenable et évolutif.

En conclusion, il mérite d'être noté qu'explorer et intégrer différentes bibliothèques et outils, tels qu'IronPDF, peut encore améliorer vos projets .NET. IronPDF propose un essai gratuit des fonctionnalités avancées de PDF. Pour les projets nécessitant des fonctionnalités PDF avancées, la licence d'IronPDF commence à partir de $799, offrant une solution robuste pour les développeurs .NET cherchant à étendre les fonctionnalités de leurs applications.

Questions Fréquemment Posées

Comment MediatR peut-il être intégré dans des projets ASP.NET Core ?

Pour intégrer MediatR dans un projet ASP.NET Core, ajoutez-le au conteneur d'injection de dépendances dans votre fichier Program.cs ou Startup.cs. Vous pouvez l'installer en utilisant la Console du Gestionnaire de Paquets avec la commande : Install-Package MediatR.

Quel rôle jouent les demandes et les gestionnaires dans MediatR ?

Dans MediatR, les demandes encapsulent les détails d'une opération et les gestionnaires traitent ces demandes en exécutant la logique métier nécessaire. Cela soutient le modèle Command Query Responsibility Segregation (CQRS), améliorant la maintenabilité des applications.

Comment les notifications et comportements améliorent-ils MediatR ?

Les notifications dans MediatR permettent à plusieurs gestionnaires de réagir à un seul message, favorisant une approche orientée événement. Les comportements fonctionnent comme un middleware pour gérer les préoccupations transversales comme la journalisation, la validation et la gestion des exceptions.

Quels sont les avantages d'utiliser le modèle médiateur dans les applications .NET ?

Le modèle médiateur, implémenté par MediatR, réduit les dépendances directes entre les composants, favorisant un couplage lâche. Cela améliore la maintenabilité et la scalabilité des applications .NET en suivant les principes de l'architecture propre.

Comment l'HTML peut-il être converti en PDF dans les applications .NET ?

IronPDF permet la conversion de HTML en PDF dans les applications .NET. Vous pouvez utiliser la méthode RenderHtmlAsPdf pour convertir des chaînes HTML ou RenderUrlAsPdf pour les URLs, garantissant que la mise en page soit préservée dans le PDF résultant.

Quelles fonctionnalités avancées IronPDF offre-t-il pour la gestion des PDF ?

IronPDF propose des fonctionnalités avancées de gestion des PDF telles que la fusion, le fractionnement, l'édition de PDFs, et leur sécurisation avec des mots de passe et des autorisations. Ces capacités sont idéales pour des tâches comme la génération de rapports, de factures et d'autres documents.

Comment MediatR soutient-il le modèle CQRS ?

MediatR soutient le modèle CQRS en séparant la logique qui gère les requêtes de commande des requêtes. Cette séparation permet un code plus évolutif et facile à maintenir, car chaque type d'opération peut être optimisé et géré indépendamment.

Quels sont les avantages d'utiliser IronPDF dans les projets .NET ?

IronPDF offre une API facile à utiliser pour créer, éditer et gérer des fichiers PDF dans les projets .NET. Sa capacité à convertir l'HTML en PDF tout en préservant la mise en page en fait un outil puissant pour générer des rapports et des documents.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite