.NET 6控制台应用中MediatR实现及_mediatr.Send(obj)调用咨询
在.NET 6控制台应用中实现MediatR并使用Send方法调用处理函数
1. 安装必要的NuGet包
打开终端,在项目目录下执行以下命令:
dotnet add package MediatR dotnet add package MediatR.Extensions.Microsoft.DependencyInjection
前者是MediatR核心库,后者用于将MediatR集成到.NET的依赖注入系统中。
2. 定义请求类
请求类需要实现IRequest<T>接口,T是处理请求后返回的结果类型。比如定义一个求和请求:
using MediatR; public class SumRequest : IRequest<int> { public int Number1 { get; set; } public int Number2 { get; set; } }
3. 实现请求处理类
处理类需要继承IRequestHandler<TRequest, TResponse>接口,实现Handle方法编写业务逻辑:
using MediatR; public class SumRequestHandler : IRequestHandler<SumRequest, int> { public Task<int> Handle(SumRequest request, CancellationToken cancellationToken) { // 这里编写具体业务逻辑,比如计算两个数的和 var sum = request.Number1 + request.Number2; return Task.FromResult(sum); } }
4. 配置依赖注入并调用Send方法
在Program.cs中,使用.NET 6的顶级语句配置Host,注册MediatR并获取实例调用:
using MediatR; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; // 构建Host并配置服务 var host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // 扫描当前程序集,注册所有请求和处理类 services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly)); }) .Build(); // 从DI容器获取IMediator实例 var mediator = host.Services.GetRequiredService<IMediator>(); // 创建请求对象并调用Send方法 var sumRequest = new SumRequest { Number1 = 5, Number2 = 10 }; var result = await mediator.Send(sumRequest); Console.WriteLine($"计算结果:{result}"); await host.RunAsync();
关键注意事项
- 确保请求类和对应的处理类在同一个程序集内,或者在注册MediatR时指定正确的程序集(比如
RegisterServicesFromAssembly(Assembly.GetExecutingAssembly())) Send方法是异步方法,必须使用await关键字调用- 每个请求类对应一个处理类,MediatR会自动根据请求类型匹配对应的处理逻辑
内容的提问来源于stack exchange,提问作者bflow1
相关产品推荐
相关产品推荐

