.NET 幫助

Mediatr C#(對開發者來說如何運作)

發佈 2024年4月29日
分享:

MediatR是一個受歡迎的 .NET 程式庫,實現中介者模式,使物件能透過中介者進行相互溝通,而非直接溝通。 這種方法在希望保持組件之間低耦合度的應用程式中特別有用。 在本文中,我們將詳細探討在 C# 開發中使用 MediatR,並提供實際範例和指南,說明如何將其整合到您的 Web 應用專案中。 我們也將探索IronPDF 函式庫用於 .NET 應用程式中的 PDF 功能用於在ASP.NET Core專案中整合PDF功能。

介紹中介者模式與MediatR

Mediatr C#(開發人員運作方式):圖 1 - MediatR 和 Mediator 模式

中介者模式是一種軟體設計模式,可以促進物件之間的互動,從而減少它們之間的直接依賴,促進鬆散耦合。 MediatR 提供了一種並不雄心勃勃的中介者實現,著重於簡單性和效率,以促進對象之間的通信。

MediatR 庫的核心概念是請求和多個處理器。 在請求點,一個對象封裝了操作或行動的細節,等待 MediatR 機制的處理。 每個請求由相應的處理器或處理方法負責處理,其中包含執行請求的業務邏輯。此結構對於實現命令查詢責任分離特別有用。(命令查詢責任分離)模式,其中讀寫操作的分離可以導致更具可維護性和可擴展的軟體架構。

使用套件管理器主控台在 .NET Core 專案中安裝 MediatR

要在 ASP.NET Core 專案中開始使用 MediatR,您首先需要安裝 MediatR 套件。 這可以透過在 Visual Studio 中的套件管理員主控台使用以下命令來完成:

Install-Package MediatR

Mediatr C#(它是如何為開發者工作的):圖2 - 安裝MediatR

安裝套件後,需要將 MediatR 添加到 ASP.NET Core 相依性注入容器中。 這通常是在您的 web 應用程式專案的 Program.csStartup.cs 文件中完成,具體取決於您使用的 ASP.NET Core 版本。 以下是如何在具有最小 API 表現層的程式中做到這一點。

// writing code
var builder = WebApplication.CreateBuilder(args);
// Add MediatR
builder.Services.AddMediatR(typeof(Program).Assembly);
var app = builder.Build();
// writing code
var builder = WebApplication.CreateBuilder(args);
// Add MediatR
builder.Services.AddMediatR(typeof(Program).Assembly);
var app = builder.Build();
' writing code
Dim builder = WebApplication.CreateBuilder(args)
' Add MediatR
builder.Services.AddMediatR(GetType(Program).Assembly)
Dim app = builder.Build()
VB   C#

在程序類別中,var builder = WebApplication.CreateBuilder(參數); 初始化網頁應用,為MediatR整合設置舞台。

創建您的第一個 MediatR 請求和處理程序

MediatR 請求是簡單的類別,例如公共類別電子郵件處理器,表示執行特定操作所需的數據。 這是一個請求公共類的示例,表示創建新用戶的命令。

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#

在此範例中,CreateUserCommand 類別實作了 IRequest** 介面,表示該請求預期一個整數回應,這個整數可能代表創建用戶的ID。

接下來,您需要為此請求創建一個處理器。在每個處理器內,public async Task Handle 方法是執行請求邏輯的核心:

public class CreateUserHandler : IRequestHandler<CreateUserCommand, int>
{
    public async Task<int> Handle(CreateUserCommand command, CancellationToken token)
    {
        // Implement logic to create 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 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 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
VB   C#

在您的應用程式中使用MediatR

通過遵循與設定 MediatR 相同的流程,您將其整合到應用程序的工作流程中。 這通常是通過 ASP.NET Core 應用程式中的控制器或端點來完成的。 以下是一個使用 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#

在此控制器中,Create 動作方法通過調用 _mediator.SendCreateUserCommand 發送給 MediatR。(命令).** MediatR 然後找到此命令的適當處理程式並執行它。 結果被返回並在同一過程中用於生成響應。

超越基本請求:通知和行為

MediatR 也支持通知和行為。 通知是多個處理程序可以訂閱和處理的消息,使您的應用程式更具事件驅動性。 另一方面,行為類似於您 MediatR 請求的中介軟體,允許您實現橫切關注點,例如日誌記錄、驗證或事務管理。

IronPDF 庫介紹

Mediatr C#(對開發人員的運作方式):圖3 - IronPDF

IronPDF 是一個 C# 程式庫,專為需要簡單方式在其應用程式中建立、編輯和處理 PDF 檔案而不用擔心寫入問題的 .NET 開發人員設計。 開發人員可以通過只轉換網頁來生成 PDF,而無需接觸複雜的 API。將 HTML 代碼直接轉換為 PDF 格式. IronPDF 不僅限於建立 PDF; 它還提供編輯 PDF 的功能,例如添加文字、圖像和頁面,甚至可以在 PDF 文件中填寫和編輯表單。 開發人員可以全面處理 PDF,包括合併、拆分和使用密碼及權限保護 PDF 文件等任務。

範例程式碼

在此範例中,假設 MediatR 請求是指我們想要包含在 PDF 中的某種形式的媒體內容或元數據。 由於MediatR與IronPDF的功能沒有直接關聯,我們將通過從包含媒體信息或參考的HTML內容創建PDF文檔作為一個很好的起點來處理這個問題。

using IronPdf;
public class PdfGenerator
{
    public void CreatePdfWithMediaInfo(string htmlContent)
    {
        License.LicenseKey = "License-Key";
        // Initialize the HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();
        // Example HTML content - replace this with your actual HTML content
        // Here, "htmlContent" should include your MediatR information in HTML format
        string htmlTemplate = $@"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>";
        // Convert HTML string to PDF
        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)
    {
        License.LicenseKey = "License-Key";
        // Initialize the HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();
        // Example HTML content - replace this with your actual HTML content
        // Here, "htmlContent" should include your MediatR information in HTML format
        string htmlTemplate = $@"
            <html>
            <head>
                <title>Media Information</title>
            </head>
            <body>
                <h1>Media Details</h1>
                <!-- Insert your media information here -->
                {htmlContent}
            </body>
            </html>";
        // Convert HTML string to PDF
        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)
		License.LicenseKey = "License-Key"
		' Initialize the HtmlToPdf renderer
		Dim renderer = New ChromePdfRenderer()
		' Example HTML content - replace this with your actual HTML content
		' Here, "htmlContent" should include your MediatR information in HTML format
		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 HTML string to PDF
		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
VB   C#

在這段程式碼中,htmlContent 是一個變數,應包含您的媒體信息,以 HTML 格式呈現。 這可能包括文本、圖片、視頻鏈接或任何其他與 HTML 相容的內容。 IronPDF將把這個HTML內容轉換為PDF文件,保留HTML中指定的佈局和格式。

Mediatr C#(適用於開發人員的工作原理):圖4 - PDF輸出

結論

Mediatr C#(它如何為開發人員工作):圖5 - 許可證

透過遵循本文章中描述的步驟,您現在應該對於將 MediatR 併入您的專案有了堅實的基礎,從基本的命令和查詢處理,到利用更高級的功能如通知和行為。 隨著您的應用程式不斷成長和演變,MediatR 提供的工具和模式可以幫助保持您的代碼庫清晰、可維護且可擴展。

在結論中,值得注意的是探索和整合不同的程式庫和工具,例如 IronPDF,可以進一步提升您的 .NET 專案。 IronPDF 提供一個免費試用進階 PDF 功能. 對於需要高級 PDF 功能的專案,IronPDF 的授權起價為 $749,為尋求擴展其應用程式功能的 .NET 開發人員提供了一個強大的解決方案。

< 上一頁
Resharper C#(它如何為開發人員工作)
下一個 >
Avalonia C#(它是如何為開發者工作的)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >