Mediatr C#(對於開發者的運行原理)
MediatR是一個流行的 .NET 函式庫,它實現了中介人模式,讓物件之間可以透過中介人而非直接溝通。 此方法對於需要維持元件間低耦合度的應用程式特別有用。 在這篇文章中,我們將以 C# 開發為背景,詳細介紹 MediatR,並提供實用範例和指導,說明如何將 MediatR 整合到您的 Web 應用程式專案中。 我們也將探討 IronPDF library for PDF functionalities in .NET applications 如何在 ASP.NET Core 專案中整合 PDF 功能。
中介模式與 MediatR 簡介

中介者模式是一種軟體設計模式,可促進物件間的互動,減少物件間的直接依賴,促進鬆散耦合。 MediatR 提供了一個不具雄心壯志的中介實作,在促進物件溝通時著重於簡單與效率。
MediatR 函式庫的核心是請求和多重處理程式的概念。 在請求點,一個物件封裝了操作或動作的細節,等待 MediatR 機制處理。 每個請求都由相對應的 handler 或 handle 方法處理,其中包含執行請求的業務邏輯。這種結構對於實作命令查詢責任區隔 (CQRS) 模式特別有用,讀取與寫入作業的分離可以使軟體架構更具維護性與擴充性。
使用套件管理員控制台在 .NET Core 專案中安裝 MediatR。
若要開始在 ASP.NET Core 專案中使用 MediatR,您首先需要安裝 MediatR 套件。 可透過 Visual Studio 中的套件管理員控制台,使用下列指令完成:
Install-Package MediatR

安裝套件後,需要將 MediatR 加入 ASP.NET Core 依賴注入容器。 這通常會在 Web 應用程式專案的 Program.cs 或 Startup.cs 檔案中完成,視您使用的 ASP.NET Core 版本而定。 以下是如何在程式中以最少的 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()
在程式類別中,var builder = WebApplication.CreateBuilder(args); 初始化 Web 應用程式,為 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
在此範例中,CreateUserCommand 類別實作了 IRequest
接下來,您需要為此請求建立一個處理程序。在每個處理程序中,請求的邏輯會在 Handle 方法中執行:
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
在您的應用程式中使用 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
在這個控制器中,Create 操作方法透過呼叫 _mediator.Send(command) 將CreateUserCommand傳送到 MediatR。 MediatR 接著會為此指令找到適當的處理程式並執行。 結果會傳回,並用於在相同的流程中產生回應。
超越基本要求:通知與行為
MediatR 也支援通知和行為。 通知是多個處理者可以訂閱和處理的訊息,可讓您的應用程式採用事件驅動的方式。 另一方面,Behaviors 類似於 MediatR 請求的中介軟體,可讓您實作日誌、驗證或交易管理等跨領域的關注事項。
IronPDF 圖書館簡介

IronPDF 是專為 .NET 開發人員設計的 C# 函式庫,這些開發人員需要一種簡單直接的方式在其應用程式中建立、編輯和處理 PDF 檔案,而無需考慮任何寫入問題。 開發人員只需將網頁或 HTML 程式碼直接轉換為 PDF 格式,即可生成 PDF,而無需使用複雜的 API。 IronPDF 不僅限於建立 PDF; 它還提供編輯 PDF 的功能,例如新增文字、圖片和頁面,甚至在 PDF 文件中填寫和編輯表格。 開發人員可以全面處理 PDF,包括合併、分割以及使用密碼和權限保護 PDF 檔案等工作。
IronPDF 專精於將 HTML 轉換為 PDF 精確地保留原始版面與樣式。 這使得它成為從網頁內容(如報告、發票和文件)產生 PDF 的理想選擇。 它支援從 HTML 檔案、URL 甚至原始 HTML 字串轉換成 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
程式碼範例
在這個範例中,假設 MediatR 請求指的是我們想要包含在 PDF 中的某種形式的媒體內容或元資料。 由於 MediatR 與 IronPDF 的功能沒有直接關係,因此我們會從包含媒體資訊或參考資料的 HTML 內容來建立 PDF 文件,作為一個很好的起點。
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
在此程式碼片段中,htmlContent 是一個變數,應該包含 HTML 格式的媒體資訊。 這可能包括文字、圖片、影片連結或任何其他 HTML 相容的內容。 IronPDF 會將這些 HTML 內容轉換成 PDF 文件,並保留 HTML 中指定的版面與格式。

結論

透過遵循本文概述的步驟,您現在應該有了一個穩固的基礎,可以將 MediatR 整合到您的專案中,從基本的指令和查詢處理開始,到利用通知和行為等更進階的功能。 當您的應用程式成長與演進時,MediatR 提供的工具與模式可協助您的程式碼保持乾淨、可維護與可擴充。
最後,值得注意的是,探索並整合不同的函式庫和工具(例如 IronPDF for .NET),可以進一步強化您的 .NET 專案。 IronPDF 提供 進階 PDF 功能的免費試用。 對於需要高級 PDF 功能的項目,IronPDF 的許可從 $999 起,為希望擴展其應用程式功能的 .NET 開發人員提供了一個強大的解決方案。
常見問題解答
如何將 MediatR 整合到 ASP.NET Core 專案中?
為了將 MediatR 整合到 ASP.NET Core 專案中,請將其新增到您的 Program.cs 或 Startup.cs 文件中的相依性注入容器中。您可以使用套件管理器主控台執行命令:Install-Package MediatR 進行安裝。
在 MediatR 中,請求和處理程序扮演什麼角色?
在 MediatR 中,請求封裝了操作的細節,處理程序則透過執行必要的業務邏輯來處理這些請求。這支援了命令查詢責任分離(CQRS)模式,增強了應用程式的可維護性。
通知和行為如何增強 MediatR?
MediatR 中的通知允許多個處理程序對單一訊息作出反應,這促進了事件驅動的方法。行為則作為中介軟體來處理橫切問題,例如日誌記錄、驗證和例外處理。
使用中介者模式在 .NET 應用程式中的好處是什麼?
中介者模式由 MediatR 實現,減少元件之間的直接相依性,促進鬆耦合。這透過遵循清晰的架構原則,增強了 .NET 應用程式的可維護性和擴展性。
如何在 .NET 應用程式中將 HTML 轉換為 PDF?
IronPDF 允許在 .NET 應用程式中將 HTML 轉換為 PDF。您可以使用 RenderHtmlAsPdf 方法來轉換 HTML 字串,或使用 RenderUrlAsPdf 來轉換 URL,以確保結果 PDF 的版面配置得以保存。
IronPDF 在 PDF 管理方面提供了哪些高級功能?
IronPDF 提供了高級的 PDF 管理功能,例如合併、拆分、編輯 PDF,並以密碼和權限進行保護。這些功能對於生成報告、發票和其他文件等任務非常理想。
MediatR 如何支援 CQRS 模式?
MediatR 通過將處理命令請求的邏輯與查詢分開來支援 CQRS 模式。此分離允許每種類型的操作可以獨立進行最佳化和管理,以達到更具可擴展性和可維護性的程式碼。
在 .NET 專案中使用 IronPDF 的優勢是什麼?
IronPDF 提供易於使用的 API 來在 .NET 專案中創建、編輯和管理 PDF 文件。其在轉換 HTML 為 PDF 時保留版面的能力使其成為生成報告和文件的強大工具。



