.NET 帮助

Mediatr C#(它对开发人员的作用)

发布 2024年四月29日
分享:

MediatR是一个流行的 .NET 库,它实现了中介模式,使对象之间可以通过中介而不是直接进行通信。 这种方法尤其适用于需要保持组件之间低耦合度的应用程序。 在本文中,我们将结合 C# 开发详细介绍 MediatR,提供实用示例和指导,说明如何将其集成到您的网络应用程序项目中。 我们还将探讨用于 .NET 应用程序中 PDF 功能的 IronPDF 库用于在 ASP.NET Core 项目中集成 PDF 功能。

调解器模式和 MediatR 简介

Mediatr C#(如何为开发人员工作):图 1 - MediatR 和调解器模式

中介模式是一种软件设计模式,它以减少对象之间直接依赖的方式促进对象之间的交互,从而促进松散耦合。 MediatR 提供了一个并不雄心勃勃的调解器实现,在促进对象通信方面注重简单和高效。

MediatR 库的核心是请求和多个处理程序的概念。 在请求点,一个对象封装了操作或动作细节,等待 MediatR 机制进行处理。 每个请求都由相应的处理程序或处理方法来处理,其中包含执行请求的业务逻辑。这种结构对于执行命令查询责任隔离尤其有用(CQRS)在这种模式下,读写操作的分离可以使软件架构更具可维护性和可扩展性。

使用软件包管理器控制台在 .NET Core 项目中安装 MediatR

要开始在 ASP.NET Core 项目中使用 MediatR,首先需要安装 MediatR 软件包。 可以通过 Visual Studio 中的软件包管理器控制台使用以下命令完成翻译:

Install-Package MediatR

Mediatr C#(如何为开发人员工作):图 2 - 安装 MediatR

安装软件包后,需要将 MediatR 添加到 ASP.NET Core 依赖注入容器中。 根据您使用的 ASP.NET Core 版本,这通常在网络应用程序项目的Program.csStartup.cs文件中完成。 下面介绍如何在程序中使用最少的 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 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 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.Send 向 MediatR 发送CreateUserCommand。(指挥部). 然后,MediatR 会为该命令找到合适的处理程序并执行它。 翻译结果将被返回并用于在同一流程中生成响应。

基本请求之外:通知和行为

MediatR 还支持通知和行为。 通知是多个处理程序可以订阅和处理的消息,允许在应用程序中使用更多的事件驱动方法。 另一方面,行为类似于 MediatR 请求的中间件,允许您实现日志记录、验证或事务管理等跨领域的关注点。

IronPDF 库简介

Mediatr C#(如何为开发人员工作):图 3 - IronPDF

IronPDF 是一个 C# 库,专为需要在应用程序中直接创建、编辑和处理 PDF 文件而无需考虑写入问题的 .NET 开发人员设计。 开发人员只需转换网页或文档,就能生成 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 功能. 对于需要高级 PDF 功能的项目,IronPDF 的许可起价为 749 美元,为希望扩展应用程序功能的 .NET 开发人员提供了强大的解决方案。

< 前一页
Resharper C#(它为开发人员的工作原理)
下一步 >
Avalonia C#(开发人员如何使用)

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >