.NET 幫助

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

發佈 2024年4月29日
分享:

MediatR 是一個流行的 .NET 庫,實現了中介者模式,使對象能夠通過中介者進行通信,而不是直接通信。這種方法在希望保持組件之間低耦合度的應用程序中特別有用。在本文中,我們將詳細了解 C# 開發中的 MediatR,提供實用的示例和如何將其集成到您的 Web 應用程序項目中的指導。我們還將探討 IronPDF 庫 用於在ASP.NET Core專案中整合PDF功能。

介紹媒介者模式和MediatR

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

中介者模式是一種軟體設計模式,能夠促進物件之間的互動,並減少它們之間的直接依賴,從而促進鬆散耦合。MediatR 提供了一個簡單有效的中介者實現,專注於簡單性和效率,以便促進物件之間的通信。

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

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

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

Install-Package MediatR

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

安装套件後,有必要將 MediatR 添加到 ASP.NET Core 依賴注入容器。這通常在您的網頁應用程式專案的 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 EmailHandler,表示執行特定操作所需的數據。以下是一個請求的 public class 示例,它表示創建新用戶的命令。

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 是一個專為 .NET 開發者設計的 C# 函式庫,提供了一種簡單的方式來在他們的應用程式中創建、編輯和處理 PDF 文件,而不用擔心寫入問題。開發人員可以通過簡單地轉換網頁來生成 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 功能的項目,IronPDF 的授權起價為 $749,為尋求擴展應用程式功能的 .NET 開發人員提供了強大的解決方案。

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

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

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >