MediatR简单运用
1,新建.net core3.1 webapi
2,引用:MediatR(10.0.1),MediatR.Extensions.Microsoft.DependencyInjection(10.0.1)
3,修改startup
public void ConfigureServices(IServiceCollection services)
{
services.AddMediatR(typeof(Startup).Assembly);
}
4,定义event
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MediatR;
namespace WebApplication3
{
public class AddUserSuccessEvent:INotification
{
public int Id { get; set; }
public string Name { get; set; }
}
public class AddUserRequestSuccessEvent : IRequest<AddUserRequestSuccessEventReponse>
{
public int Id { get; set; }
public string Name { get; set; }
}
public class AddUserRequestSuccessEventReponse
{
public int Id { get; set; }
public string Name { get; set; }
}
public class AddUserStreamSuccessEvent : IStreamRequest<AddUserStreamSuccessEventReponse>
{
public int Id { get; set; }
public string Name { get; set; }
}
public class AddUserStreamSuccessEventReponse
{
public int Id { get; set; }
public string Name { get; set; }
}
}
5,定义处理event
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MediatR;
using System.Threading;
namespace WebApplication3.DomainEventHandler
{
public class AddUserSuccessEventHandler:INotificationHandler<AddUserSuccessEvent>
{
public Task Handle(AddUserSuccessEvent notification, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
public class AddUserRequestSuccessEventHandler : IRequestHandler<AddUserRequestSuccessEvent, AddUserRequestSuccessEventReponse>
{
public Task<AddUserRequestSuccessEventReponse> Handle(AddUserRequestSuccessEvent notification, CancellationToken cancellationToken)
{
var result = new AddUserRequestSuccessEventReponse() { Id = 1, Name = Guid.NewGuid().ToString() };
return Task.FromResult(result);
}
}
public class AddUserStreamSuccessEventHandler : IStreamRequestHandler<AddUserStreamSuccessEvent, AddUserStreamSuccessEventReponse>
{
public async IAsyncEnumerable<AddUserStreamSuccessEventReponse> Handle(AddUserStreamSuccessEvent notification, CancellationToken cancellationToken)
{
for (int i = 0; i < 2; i++)
{
var result = new AddUserStreamSuccessEventReponse() { Id = i, Name = Guid.NewGuid().ToString() };
yield return result;
}
}
}
}
6,新增接口调用
[HttpGet("AddUser")]
public async Task<IActionResult> AddUser()
{
await _mediator.Publish(new AddUserSuccessEvent { Id = 1, Name = Guid.NewGuid().ToString()});
return Ok("成功");
}
[HttpGet("AddUserRequest")]
public async Task<IActionResult> AddUserRequest()
{
var result = await _mediator.Send<AddUserRequestSuccessEventReponse>(new AddUserRequestSuccessEvent { Id = 1, Name = Guid.NewGuid().ToString() });
return Ok(JsonConvert.SerializeObject(result));
}
[HttpGet("AddUserStream")]
public async Task<IActionResult> AddUserStream()
{
var list = new List<AddUserStreamSuccessEventReponse>();
var requestData = new AddUserStreamSuccessEvent { Id = 1, Name = Guid.NewGuid().ToString() };
await foreach (var item in _mediator.CreateStream<AddUserStreamSuccessEventReponse>(requestData))
{
list.Add(item);
}
return Ok(JsonConvert.SerializeObject(list));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!