.NET 帮助

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

发布 2024年四月29日
分享:

MediatR 是一种流行的 .NET 库,它实现了中介模式,使对象之间可以通过中介而不是直接进行通信。在需要保持组件间低耦合度的应用程序中,这种方法尤其有用。在本文中,我们将详细介绍 MediatR 在 C# 开发中的应用,并提供如何将其集成到网络应用项目中的实用示例和指导。我们还将探讨 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 请求是一些简单的类,如公共类电子邮件处理程序(emailhandler),它代表了执行特定操作所需的数据。下面是一个请求公有类的示例,它表示创建新用户的命令。

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# 库,专为.NET 开发人员设计,他们需要一种简单的方法在应用程序中创建、编辑和处理 PDF 文件,而无需考虑任何写入问题。开发人员无需使用复杂的应用程序接口(API),只需简单地转换网页或文档即可生成 PDF 文件。 将 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 功能的项目,IronPDF 的许可起价为 749 美元,为希望扩展应用程序功能的 .NET 开发人员提供了强大的解决方案。

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

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

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