Asp.Net Core6.0中MediatR的应用CQRS( 二 )

来看一下调用
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

文章插图
同样我们启动程序也打印了我们的输出 。
 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

文章插图
我们写了一个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();        }    }

推荐阅读