在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
MediatR 是一個流行的 .NET 庫,實現了中介者模式,使對象能夠通過中介者進行通信,而不是直接通信。這種方法在希望保持組件之間低耦合度的應用程序中特別有用。在本文中,我們將詳細了解 C# 開發中的 MediatR,提供實用的示例和如何將其集成到您的 Web 應用程序項目中的指導。我們還將探討 IronPDF 庫 用於在ASP.NET Core專案中整合PDF功能。
中介者模式是一種軟體設計模式,能夠促進物件之間的互動,並減少它們之間的直接依賴,從而促進鬆散耦合。MediatR 提供了一個簡單有效的中介者實現,專注於簡單性和效率,以便促進物件之間的通信。
MediatR 庫的核心概念是請求和多個處理器。在請求點,一個物件封裝了操作或行動的詳細資訊,並等待 MediatR 機制的處理。每個請求由對應的處理器或處理方法處理,該方法包含執行請求的業務邏輯。這種結構對實現命令查詢責任分離(Command Query Responsibility Segregation)特別有用。 (命令查詢責任分離) 模式,其中讀寫操作的分離可以導致更具可維護性和可擴展的軟體架構。
要開始在 ASP.NET Core 專案中使用 MediatR,首先需要安裝 MediatR 套件。可以在 Visual Studio 中使用套件管理員主控台透過以下命令完成:
Install-Package MediatR
安装套件後,有必要將 MediatR 添加到 ASP.NET Core 依賴注入容器。這通常在您的網頁應用程式專案的 Program.cs 或 Startup.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()
在程序類別中,var builder = WebApplication.CreateBuilder(參數); 初始化網頁應用,為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
在此範例中,CreateUserCommand 類別實作了 IRequest
接下來,您需要為這個請求創建一個處理程式。在每個處理程式內,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
透過與設定 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 將 CreateUserCommand 發送給 MediatR。(命令)**. MediatR 會找到這個命令的適當處理程序並執行它。結果會被返回並在同一過程中用來生成回應。
MediatR 也支援通知和行為。通知是一種訊息,可以被多個處理器訂閱並處理,讓您的應用程式採取更事件驅動的方式。另一方面,行為類似於 MediatR 請求的中介軟體,允許您實現日誌記錄、驗證或交易管理等橫切關注點。
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
在此程式碼片段中,htmlContent 是一個變數,應包含您的媒體資訊,以 HTML 格式呈現。這可能包括文字、圖像、視頻連結或任何其他與 HTML 相容的內容。IronPDF 將把這些 HTML 內容轉換成 PDF 文件,並保留 HTML 中指定的佈局和格式。
通過遵循本文所列出的步驟,您現在應該已經為在項目中整合MediatR打下了堅實的基礎,從基本的命令和查詢處理到利用更高級的功能如通知和行為。隨著應用程序的增長和演進,MediatR提供了可以幫助保持代碼庫乾淨、可維護和可擴展的工具和模式。
在結尾時,值得注意的是,探索和整合不同的庫和工具,如IronPDF,可以進一步增強您的 .NET 項目。IronPDF 提供了一個 免費試用對於需要高級 PDF 功能的項目,IronPDF 的授權起價為 $749,為尋求擴展應用程式功能的 .NET 開發人員提供了強大的解決方案。