来看一下调用
using MediatR;using Microsoft.Extensions.DependencyInjection;using Mrdiator.Query;using Newtonsoft.Json;using System.Net.Http;using System.Reflection;//实例化一个ServiceCollectionIServiceCollection services = new ServiceCollection();//添加当前的程序集MediatR会扫描当前的程序集//services.AddMediatR(typeof(Program).Assembly);services.AddMediatR(Assembly.GetExecutingAssembly());//构建一个serviceProvidervar serviceProvider = services.BuildServiceProvider();//从容器中获取mediatorvar mediator = serviceProvider.GetService<IMediator>();//执行命令var result =await mediator.Send(new GetInfoQuery(18,"wyy",DateTime.Now));
![Asp.Net Core6.0中MediatR的应用CQRS](http://img.zhejianglong.com/231019/2104394F5-1.png)
文章插图
同样我们启动程序也打印了我们的输出 。
b.IRequest:无返回值的栗子
using MediatR;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Mrdiator.Query{ /// <summary> /// 命令查询类--无返回值 /// </summary> internal class GetInfoQuery2 : IRequest { public GetInfoQuery2(int age, string name, DateTime nowTime) { Age = age; Name = name; NowTime = nowTime; } public int Age { get; set; } public string Name { get; set; } public DateTime NowTime { get; set; } } /// <summary> /// 命令处理类1-----继承AsyncRequestHandler 实现抽象方法 Handle /// </summary> internal class GetInfoQuery2_2Handller : AsyncRequestHandler<GetInfoQuery2> { protected override Task Handle(GetInfoQuery2 request, CancellationToken cancellationToken) { Console.WriteLine("GetInfoQuery2_2Handller"); return Task.CompletedTask; } } /// <summary> /// 命令处理类2-----IRequestHandler 实现接口方法 Handle /// </summary> internal class GetInfoQuery2Handller : IRequestHandler<GetInfoQuery2> { public Task<Unit> Handle(GetInfoQuery2 request, CancellationToken cancellationToken) { Console.WriteLine("GetInfoQuery2Handller"); return Task.FromResult(new Unit()); } }}var result2 =await mediator.Send(new GetInfoQuery2(18,"wyy",DateTime.Now));
![Asp.Net Core6.0中MediatR的应用CQRS](http://img.zhejianglong.com/231019/21043a094-2.png)
文章插图
我们写了一个GetInfoQuery2,下面有两个类都在泛型里实现了 , 可以看到程序是只执行了GetInfoQuery2_2Handller就可以看出IRequest命令类跟处理类失忆对一的关系 。我们只是通过Mediator的send将GetInfoQuery2 作为参数传进去程序就能执行到GetInfoQuery2_2Handller里面的Handle方法这就是MediatR的好处 。
/// <summary> /// 命令处理类-----继承RequestHandler 实现抽象方法 Handle /// </summary> internal class GetInfoQuery3Handller : RequestHandler<GetInfoQuery3, Result> { protected override Result Handle(GetInfoQuery3 request) { Console.WriteLine("GetInfoQuery3Handller"); return new Result(); } }
推荐阅读
- 常用Python库整理
- 加拿大高中排名 加拿大高中排名
- 定位java程序中占用cpu最高的线程堆栈信息
- jk罗琳中文官网 jk罗琳
- PE管十大品牌有哪些 中国pe管道十大品牌
- SpringCloudAlibaba 微服务组件 Nacos 之配置中心源码深度解析
- 幻塔大眼萌仔怎么获取
- 《正义联盟》中超人是怎么死的
- 正义联盟中超人什么时候死的(正义联盟死去的英雄)
- 王者荣耀娜可露露前尘镜中文语音包怎么设置