.NET 帮助 Mediatr C#(开发人员如何使用) Curtis Chau 已更新:七月 28, 2025 Download IronPDF NuGet 下载 DLL 下载 Windows 安装程序 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article MediatR 是一个流行的 .NET 库,实现了中介者模式,使对象通过中介者而不是直接相互通信。 这种方法在希望在组件之间保持低耦合的应用程序中特别有用。 在本文中,我们将详细了解 C# 开发中的 MediatR,提供如何将其集成到您的 Web 应用程序项目中的实际示例和指导。 我们还将探索IronPDF 用于 .NET 应用程序中的 PDF 功能的库,以便在 ASP.NET Core 项目中集成 PDF 功能。 中介者模式和 MediatR 简介 中介者模式是一种软件设计模式,以降低对象之间的直接依赖关系的方式促进对象之间的交互,促进松耦合。 MediatR 提供了一个不复杂的中介者实现,专注于促进对象通信的简单性和效率。 MediatR 库的核心概念是请求和多个处理程序。 在请求点上,对象封装操作或动作详情,等待 MediatR 机制的处理。 每个请求由相应的处理程序或处理方法处理,该方法包含执行请求的业务逻辑。这种结构对于实现命令查询职责分离 (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() $vbLabelText $csharpLabel 在程序类中,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 $vbLabelText $csharpLabel 在此示例中,CreateUserCommand 类实现 IRequest 接口,指示该请求期望整数响应,这可能代表创建用户的 ID。 接下来,您需要为此请求创建一个处理程序。在每个处理程序中,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 $vbLabelText $csharpLabel 在您的应用程序中使用 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 $vbLabelText $csharpLabel 在此控制器中,Create 动作方法通过调用 _mediator.Send(command) 将 CreateUserCommand 发送到 MediatR。 然后 MediatR 找到适合此命令的处理程序并执行它。 结果返回并在同一过程中用于生成响应。 超越基本请求:通知和行为 MediatR 还支持通知和行为。 通知是多个处理程序可以订阅和处理的消息,允许应用程序中采用更多事件驱动的方法。 另一方面,行为类似于 MediatR 请求的中间件,允许您实现跨领域关注点,如日志记录、验证或事务管理。 IronPDF库简介 IronPDF 是为 .NET 开发人员设计的 C# 库,他们需要一种简单的方法来在其应用程序中创建、编辑和处理 PDF 文件,而无需担心写入问题。 开发人员可以简单地将网页或HTML 代码直接转换为 PDF 格式,而无需使用复杂的 API。 IronPDF 不仅限于创建 PDF; 它还提供用于编辑 PDF 的功能,例如添加文本、图像和页面,甚至在 PDF 文档中填写和编辑表单。 开发人员可以全面处理 PDF,包括合并、拆分和使用密码和权限保护 PDF 文件等任务。 IronPDF 专注于将HTML 转换为 PDF,精确保留原始布局和样式。 这使其非常适合从基于 Web 的内容(如报告、发票和文档)生成 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 $vbLabelText $csharpLabel 代码示例 在此示例中,我们假设 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> <!-- Insert your media information here --> {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> <!-- Insert your media information here --> {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(ByVal htmlContent As String) ' Insert your License Key here if required License.LicenseKey = "License-Key" ' Initialize the HtmlToPdf renderer Dim renderer = 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> <!-- Insert your media information here --> {htmlContent} </body> </html>" ' Convert the HTML string to a PDF document 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 $vbLabelText $csharpLabel 在此代码片段中,htmlContent 是一个变量,应包含您的媒体信息以 HTML 格式。 这可以包括文本、图像、视频链接或任何其他 HTML 兼容内容。 IronPDF 将此 HTML 内容转换为 PDF 文档,保留 HTML 中指定的布局和格式。 结论 通过按照本文中概述的步骤,您现在应该为将 MediatR 合并到您的项目中奠定了坚实的基础,从基本的命令和查询处理开始,一直到利用更高级的功能如通知和行为。 随着应用程序的增长和发展,MediatR 提供了可以帮助保持代码库清晰、可维护和可扩展的工具和模式。 结束时,值得注意的是,探索和集成不同的库和工具,如 IronPDF,可能会进一步增强您的 .NET 项目。 IronPDF 提供高级 PDF 功能的免费试用。 对于需要高级 PDF 功能的项目,IronPDF 的授权从 $799 开始,为 .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 时保留布局的能力使其成为生成报告和文档的强大工具。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多 已更新九月 4, 2025 C# String Equals(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 已更新八月 5, 2025 C# Switch 模式匹配(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 Resharper C#(开发人员如何使用)Avalonia C#(开发人员如何使...
已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多