在生產環境中測試,無水印。
在任何需要的地方都能運行。
獲得 30 天的全功能產品。
在幾分鐘內上手運行。
試用產品期間完全訪問我們的支援工程團隊
MediatR 是一個受歡迎的 .NET 庫,它實現了中介者模式,使對象能夠通過中介進行通信,而不是直接進行通信。 這種方法在希望保持組件之間低耦合度的應用程式中特別有用。 在本文中,我們將詳細探討在 C# 開發中使用 MediatR,並提供實際範例和指南,說明如何將其整合到您的 Web 應用專案中。 我們還將探索 IronPDF 庫中的 PDF 功能在 .NET 應用程式中的應用,以便在 ASP.NET Core 專案中整合 PDF 功能。
中介者模式是一種軟體設計模式,可以促進物件之間的互動,從而減少它們之間的直接依賴,促進鬆散耦合。 MediatR 提供了一種並不雄心勃勃的中介者實現,著重於簡單性和效率,以促進對象之間的通信。
MediatR 庫的核心概念是請求和多個處理器。 在請求點,一個對象封裝了操作或行動的細節,等待 MediatR 機制的處理。 每個請求都由對應的處理器或處理方法來處理,該方法包含執行請求的業務邏輯。此結構對於實現命令查詢責任分離(CQRS)模式特別有用,因為讀寫操作的分離可以導致更具可維護性和可擴展的軟體架構。
要在 ASP.NET Core 專案中開始使用 MediatR,您首先需要安裝 MediatR 套件。 這可以透過在 Visual Studio 中的套件管理員主控台使用以下命令來完成:
Install-Package MediatR
Install-Package MediatR
安裝套件後,需要將 MediatR 添加到 ASP.NET Core 相依性注入容器中。 這通常在您的 Web 應用程序專案中的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(args); 初始化了網路應用程式,為 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
接下來,您需要為此請求建立一個處理器。在每個處理器中,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(command) 將 CreateUserCommand 發送給 MediatR。 MediatR 然後找到此命令的適當處理程式並執行它。 結果被返回並在同一過程中用於生成響應。
MediatR 也支持通知和行為。 通知是多個處理程序可以訂閱和處理的消息,使您的應用程式更具事件驅動性。 另一方面,行為類似於您 MediatR 請求的中介軟體,允許您實現橫切關注點,例如日誌記錄、驗證或事務管理。
IronPDF 是一個 C# 程式庫,專為需要簡單方式在其應用程式中建立、編輯和處理 PDF 檔案而不用擔心寫入問題的 .NET 開發人員設計。 開發人員可以透過將網頁或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)
{
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 功能的免費試用。 對於需要高級 PDF 功能的專案,IronPDF 的授權從 $749 起,為 .NET 開發人員提供擴展應用程式功能的穩健解決方案。