首页 > 编程语言 >MediatR是一个在.NET应用程序中实现“中介者模式”的开源库

MediatR是一个在.NET应用程序中实现“中介者模式”的开源库

时间:2024-05-08 21:12:15浏览次数:27  
标签:MediatR 命令 查询 响应 开源 处理程序 NET public

MediatR是一个在.NET应用程序中实现“中介者模式”的开源库。该库通过一种进程内消息传递机制(无其他外部依赖),进行请求/响应、命令、查询、通知和事件的消息传递,并通过泛型来支持消息的智能调度。
中介者模式是一种行为设计模式,它允许对象之间通过一个中介者对象进行交互,而不是直接相互依赖和交互。MediatR通过将请求和处理程序解耦,使应用程序的不同组件之间的通信更加简单和灵活。具体而言,它将请求封装在一个对象中,然后将该对象传递给中介者,中介者将选择正确的处理程序来处理该请求。
MediatR还提供了一些功能,如管道处理程序(Pipeline Behaviors)、日志记录、异常处理等,以增强中介者模式的功能和灵活性。在消息传递方式上,MediatR支持单播(请求/响应消息,分派给单个处理程序)和多播(通知消息,分派给多个处理程序)。

 

使用MediatR的示例通常涉及以下步骤:
  1. 安装MediatR:
    使用NuGet包管理器在你的项目中安装MediatR。在Visual Studio中,你可以右键单击项目 -> 选择“管理NuGet程序包” -> 搜索“MediatR” -> 点击“安装”。
  2. 定义命令和查询:
    在应用程序中定义你的命令和查询对象。这些通常作为C#类实现,并可能包含一些接口或特定的基类。例如,一个创建用户的命令可能如下:
public class CreateUserCommand : IRequest<User>  {      public string Username { get; set; }      public string Email { get; set; }      // 其他必要的属性  }

其中IRequest<TResponse>是MediatR提供的一个接口,表示一个请求,并期望一个响应。

3.创建处理程序:
对于每个命令和查询,你需要创建一个或多个处理程序。这些处理程序实现了MediatR的接口,并定义了如何响应特定的请求。

public class CreateUserCommandHandler : IRequestHandler<CreateUserCommand, User>  {      private readonly IUserService _userService; // 假设你有一个用户服务  
public CreateUserCommandHandler(IUserService userService) { _userService = userService; }
public async Task<User> Handle(CreateUserCommand request, CancellationToken cancellationToken) { // 使用请求中的信息来创建用户 var user = await _userService.CreateAsync(request.Username, request.Email); return user; } }

在这个例子中,IRequestHandler<TRequest, TResponse>是MediatR的接口,表示一个能够处理特定请求并返回响应的处理程序。

4.在Startup类中注册服务:
在ASP.NET Core应用程序的Startup类中,你需要注册你的命令和查询处理程序,以及MediatR本身。

public void ConfigureServices(IServiceCollection services)  {      // ...其他服务注册...  
services.AddMediatR(typeof(Startup).GetTypeInfo().Assembly); // 注册当前程序集中的所有处理程序
// 如果你想注册特定程序集中的处理程序,可以传递该程序集的Type // services.AddMediatR(typeof(CreateUserCommandHandler).GetTypeInfo().Assembly);
// ...其他服务注册... }

5.发送命令或查询:
在你的应用程序代码中,你可以使用MediatR的IMediator接口来发送命令或查询。

public class SomeClass  {      private readonly IMediator _mediator;  
public SomeClass(IMediator mediator) { _mediator = mediator; }
public async Task CreateUserAsync(string username, string email) { var createUserCommand = new CreateUserCommand { Username = username, Email = email }; var user = await _mediator.Send(createUserCommand); // 发送命令并等待响应 // 处理响应... } }

在这个示例中,IMediator接口用于发送命令和查询。Send方法用于发送命令(期望一个响应),而Publish方法用于发布通知(不期望响应)。

标签:MediatR,命令,查询,响应,开源,处理程序,NET,public
From: https://www.cnblogs.com/firespeed/p/18180890

相关文章

  • 盘点5个常用的.Net依赖注入框架!
    来自: 编程乐趣盘点5个常用的依赖注入框架,特别是前面2个。1、Microsoft.Extensions.DependencyInjection这是.NetCore框架本身内置集成的,我们只需引入Microsoft.Extensions.DependencyInjection,就可以直接使用。usingDependencyInjectionSample.Interfaces;usingDependency......
  • Seal-Report是一个基于.NET框架的开源报表项目
    01项目简介Seal-Report是一个基于.NET框架的开源项目,提供了简单、直观的报表和报告功能,具有报表设计器,可减少复杂的配置,无需编程知识也可以使用。采用该项目,就可以为企业快速提供高质量的报表,从而提升工作效率和决策速度。 https://github.com/ariacom/Seal-Report02项目功......
  • 2022年最新的Asp.Net程序员学习路线图
    给大家分享一个微软MVP整理的,2022年最新的Asp.Net程序员学习路线图。这个图的知识点,分为:1、个人必须掌握2、进一步学习3、兴趣4、其他5、可能需要学习。第1、2部分大家必须去掌握起来,其他的内容可以根据工作的需要、兴趣选择。 在Github已经针有人对路线图的每一个知识点......
  • ExcelDataReader:一个.Net高性能Excel开源读取器
    ExcelDataReader:一个.Net高性能Excel开源读取器来自:编程乐趣推荐一个用于读取MicrosoftExcel文件的高性能开源库。 01项目简介ExcelDataReader是一个功能强大且易于使用的开源项目,提供了丰富的读取API,专门读取Excel文件的数据,特别是处理大数据量的情况。ExcelDataReader......
  • websocket-sharp:.NET平台上的WebSocket客户端与服务器开源库
    1.简介:websocket-sharp提供WebSocket客户端和服务器库,基于C#开发的,并遵循WebSocket协议规范,使得开发人员能够轻松地在.NET应用程序中实现WebSocket通信。https://github.com/sta/websocket-sharpwebsocket-sharp特色功能有:1、简洁易用的API:提供清晰且直观的API接......
  • .Net开源项目推荐:12 篇热文汇总
    今天盘点下4月份分享的12篇热文,其中包含10个开源项目、2个VisualStudio插件(点击标题查看详情)。1、ImageSharp:高性能跨平台.NET开源图形库一款完全托管的代码库,高性能、跨平台的图形库。它支持在任何支持.NET6+的环境中安装和使用,可以运用在各种场景:设备端,云端以及嵌入式和物......
  • 基于深度卷积神经网络的时间序列图像分类,开源、低功耗、低成本的人工智能硬件提供者
    具体的软硬件实现点击http://mcu-ai.com/MCU-AI技术网页_MCU-AI人工智能卷积神经网络(CNN)通过从原始数据中自动学习层次特征表示,在图像识别任务中取得了巨大成功。虽然大多数时间序列分类(TSC)文献都集中在1D信号上,但本文使用递归图(RP)将时间序列转换为2D纹理图像,然后利用深度CNN分......
  • CentOS 7 部署 NET6.0 项目过程
    1、环境配置NET6.0环境搭建主要是SDK和runtime的安装,下图截自官网说明了SDK和runtime的关系   CentOS7安装SDK方法第一步:rpm-Uvhhttps://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm第二部:yuminstalldotnet-sd......
  • RDP Wrapper Library v1.6.2 开源RDP 主机服务器
    RDPWrapperLibraryv1.6.2 主要特点:从Vista开始的任何Windows版本上的RDP主机服务器同时进行控制台和远程会话同时使用同一用户进行本地和远程登录(请参阅配置应用程序)最多 15个并发会话(实际限制取决于您的硬件和操作系统版本)控制台和RDP会话重影(在Windows......
  • 批量修改asp.net core 项目的解决方案的命名空间
    单个命名空间重命名:打开任何使用旧命名空间(例如:“OrchardCore”)的文件。右键点击命名空间名称,选择“重构”然后选择“重命名”。输入新的命名空间名称(例如:“SuperCore”),确保选中“预览更改”,然后点击“应用”。VisualStudio将显示所有受影响的引用,并让你确认修改。全局搜索......