Mediatr C# (jak to działa dla programistów)
MediatR jest popularną biblioteką .NET, która implementuje wzorzec mediatora, umożliwiając obiektom komunikację za pośrednictwem mediatora zamiast bezpośrednio między sobą. To podejście jest szczególnie przydatne w aplikacjach, w których pożądane jest utrzymanie niskiego poziomu sprzężenia między komponentami. W tym artykule dokładnie przyjrzymy się MediatR w kontekście rozwijania C#, dostarczając praktyczne przykłady i wskazówki, jak zintegrować go z projektami aplikacji webowych. Zbadamy również bibliotekę IronPDF dla funkcjonalności PDF w aplikacjach .NET do integracji funkcji PDF w projektach ASP.NET Core.
Wprowadzenie do wzorca Mediator i MediatR

Wzorzec mediatora to wzorzec projektowy, który ułatwia interakcję między obiektami w sposób redukujący bezpośrednie zależności między nimi, promując luźne sprzężenie. MediatR zapewnia skromną implementację mediatora, skupiając się na prostocie i efektywności w ułatwianiu komunikacji między obiektami.
Sercem biblioteki MediatR jest koncepcja żądań i wielu obsługujących. W punkcie żądania obiekt kapsułkuje szczegóły operacji lub działania, czekając na przetworzenie przez mechanizm MediatR. Każde żądanie jest obsługiwane przez odpowiadający mu obsługujący lub metodę obsługi, która zawiera logikę biznesową do wykonania żądania. Ta struktura jest szczególnie przydatna do implementacji wzorca Command Query Responsibility Segregation (CQRS), gdzie rozdzielenie operacji odczytu i zapisu może prowadzić do bardziej łatwo utrzymywalnych i skalowalnych architektur oprogramowania.
Instalacja MediatR w projekcie .NET Core za pomocą konsoli Package Manager
Aby zacząć używać MediatR w projekcie ASP.NET Core, najpierw musisz zainstalować pakiet MediatR. Możesz to zrobić za pomocą konsoli Package Manager w Visual Studio, używając następującej komendy:
Install-Package MediatR

Po zainstalowaniu pakietu należy dodać MediatR do kontenera iniekcji zależności ASP.NET Core. Zazwyczaj jest to robione w pliku Program.cs lub Startup.cs twojego projektu aplikacji webowej w zależności od wersji ASP.NET Core, z której korzystasz. Oto jak to zrobić w programie z warstwą prezentacji minimalnego API.
// 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()
W klasie programu, var builder = WebApplication.CreateBuilder(args); inicjalizuje aplikację webową, tworząc warunki do integracji MediatR.
Tworzenie pierwszego żądania MediatR i obsługi
Żądania MediatR to proste klasy reprezentujące dane potrzebne do wykonania określonej operacji. Oto przykład klasy żądania, która reprezentuje polecenie utworzenia nowego użytkownika.
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
W tym przykładzie klasa CreateUserCommand implementuje interfejs IRequest
Następnie należy utworzyć obsługujący dla tego żądania. W każdym obsługującym metoda Handle jest miejscem, w którym wykonywana jest logika żądania:
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
Używanie MediatR w Twojej aplikacji
Postępując według tego samego procesu, który użyty został do skonfigurowania MediatR, integrujesz go z przepływem pracy twojej aplikacji. Zazwyczaj odbywa się to poprzez kontroler lub końcówkę w aplikacji ASP.NET Core. Oto przykład użycia kontrolera 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
W tym kontrolerze metoda akcji Create wysyła CreateUserCommand do MediatR, wywołując _mediator.Send(command). MediatR następnie znajduje odpowiedniego obsługującego dla tego polecenia i wykonuje go. Wynik jest zwracany i używany do wygenerowania odpowiedzi w tym samym procesie.
Poza podstawowymi żądaniami: powiadomienia i zachowania
MediatR obsługuje także powiadomienia i zachowania. Powiadomienia to wiadomości, które mogą być subskrybowane i obsługiwane przez wielu obsługujących, umożliwiając bardziej zdarzeniowe podejście w aplikacji. Zachowania zaś są podobne do middleware dla żądań MediatR, umożliwiając implementację przekrojowych aspektów takich jak logowanie, walidacja czy zarządzanie transakcjami.
Wprowadzenie do biblioteki IronPDF

IronPDF to biblioteka C# zaprojektowana dla deweloperów .NET, którzy potrzebują prostego sposobu na tworzenie, edytowanie i pracę z plikami PDF w ich aplikacjach bez obaw o zapisywanie. Deweloperzy mogą tworzyć PDF-y bez angażowania się w skomplikowane API, po prostu konwertując strony internetowe lub kod HTML bezpośrednio do formatu PDF. IronPDF nie jest ograniczone tylko do tworzenia PDF-ów; oferuje również funkcje edycji PDF-ów, takie jak dodawanie tekstu, obrazów i stron, czy nawet wypełnianie i edytowanie formularzy w dokumentach PDF. Deweloperzy mogą kompleksowo pracować z PDF-ami, włączając zadania takie jak łączenie, dzielenie i zabezpieczanie plików PDF hasłami i uprawnieniami.
IronPDF specjalizuje się w konwersji HTML do PDF, zachowując oryginalne układy i style z precyzją. Czyni to idealnym rozwiązaniem do generowania PDF-ów z treści opartych na sieci, takich jak raporty, faktury i dokumentacja. Obsługuje konwersję z plików HTML, adresów URL, a nawet z surowych łańcuchów HTML do plików 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
Przykład kodu
W tym przykładzie załóżmy, że żądanie MediatR odnosi się do jakiejś formy treści medialnej lub metadanych, które chcemy uwzględnić w naszym PDF. Ponieważ MediatR nie jest bezpośrednio związane z funkcjonalnością IronPDF, podejdziemy do tego, tworząc dokument PDF z treści HTML, który zawiera informacje lub odniesienia multimedialne jako świetny punkt wyjścia.
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
W tym fragmencie kodu, zmienna htmlContent powinna zawierać informacje medialne w formacie HTML. Może to zawierać tekst, obrazy, linki do filmów lub dowolną inną treść kompatybilną z HTML. IronPDF przekonwertuje tę treść HTML na dokument PDF, zachowując układ i formatowanie określone w HTML.

Wnioski

Postępując zgodnie z krokami przedstawionymi w tym artykule, powinieneś już mieć mocną podstawę do wdrożenia MediatR do swoich projektów, począwszy od podstawowego zarządzania poleceniami i zapytaniami po wykorzystywanie bardziej zaawansowanych funkcji, takich jak powiadomienia i zachowania. W miarę jak twoja aplikacja rośnie i rozwija się, MediatR oferuje narzędzia i wzorce, które mogą pomóc utrzymać czysty, łatwy w utrzymaniu i skalowalny kod.
Na zakończenie warto wspomnieć, że przeglądanie i integracja różnych bibliotek i narzędzi, takich jak IronPDF, mogą jeszcze bardziej wzmocnić twoje projekty .NET. IronPDF oferuje bezpłatną wersję próbną zaawansowanych funkcji PDF. Dla projektów wymagających zaawansowanych funkcji PDF, licencjonowanie IronPDF zaczyna się od $799, oferując solidne rozwiązanie dla deweloperów .NET, którzy chcą rozszerzyć funkcjonalności swoich aplikacji.
Często Zadawane Pytania
W jaki sposób można zintegrować MediatR z projektami .NET Core?
Aby zintegrować MediatR z projektem .NET Core, dodaj go do kontenera wstrzykiwania zależności w pliku Program.cs lub Startup.cs. Możesz zainstalować go za pomocą konsoli menedżera pakietów, używając polecenia: Install-Package MediatR.
Jaką rolę odgrywają żądania i procedury obsługi w MediatR?
W MediatR żądania zawierają szczegóły operacji, a moduły obsługi przetwarzają te żądania, wykonując niezbędną logikę biznesową. Wspiera to wzorzec Command Query Responsibility Segregation (CQRS), zwiększając łatwość utrzymania aplikacji.
W jaki sposób powiadomienia i zachowania wzbogacają MediatR?
Powiadomienia w MediatR pozwalają wielu handlerom reagować na jedną wiadomość, promując podejście oparte na zdarzeniach. Zachowania działają jako oprogramowanie pośredniczące, obsługujące zagadnienia przekrojowe, takie jak logowanie, walidacja i obsługa wyjątków.
Jakie są zalety stosowania wzorca mediatora w aplikacjach .NET?
Wzorzec mediatora, zaimplementowany przez MediatR, zmniejsza bezpośrednie zależności między komponentami, promując luźne sprzężenie. Zwiększa to łatwość konserwacji i skalowalność aplikacji .NET poprzez przestrzeganie zasad czystej architektury.
Jak przekonwertować HTML na PDF w aplikacjach .NET?
IronPDF umożliwia konwersję HTML do PDF w aplikacjach .NET. Można użyć metody RenderHtmlAsPdf do konwersji ciągów HTML lub RenderUrlAsPdf dla adresów URL, zapewniając zachowanie układu w wynikowym pliku PDF.
Jakie zaawansowane funkcje oferuje IronPDF w zakresie zarządzania plikami PDF?
IronPDF oferuje zaawansowane funkcje zarządzania plikami PDF, takie jak scalanie, dzielenie, edycja oraz zabezpieczanie plików hasłami i uprawnieniami. Funkcje te idealnie nadają się do zadań takich jak generowanie raportów, faktur i innej dokumentacji.
W jaki sposób MediatR obsługuje wzorzec CQRS?
MediatR obsługuje wzorzec CQRS poprzez oddzielenie logiki obsługującej żądania poleceń od zapytań. To rozdzielenie pozwala na tworzenie kodu bardziej skalowalnego i łatwiejszego w utrzymaniu, ponieważ każdy typ operacji może być niezależnie optymalizowany i zarządzany.
Jakie są zalety korzystania z IronPDF w projektach .NET?
IronPDF zapewnia łatwe w użyciu API do tworzenia, edycji i zarządzania plikami PDF w projektach .NET. Możliwość konwersji HTML do PDF z zachowaniem układu sprawia, że jest to potężne narzędzie do generowania raportów i dokumentów.




