net8实现MediatR小示例C#
MediatR是.net下的一个实现消息传递的库,简洁高效,它采用
中介者设计模式,通过进程内消息传递机制,进行请求/响应、命令、查询、通知和事件的消息传递,可通过泛型来支持消息的智能调度,用于领域事件中。
实践:
- 新建一个net8 WebApi标准项目,选择启用OpenAPI支持和使用控制器;
- 添加项目引用,<PackageReference Include="MediatR" Version="12.2.0" />
- 注册服务:
1 // Add services to the container. 2 builder.Services.AddMediatR(cfg => 3 { 4 cfg.RegisterServicesFromAssembly(typeof(Program).Assembly); 5 });
- 新建一个Information类
public record Information (string Info) : INotification;
- 建立一个处理器InformationHandler类
public class InformationHandler(ILogger<InformationHandler> _logger) : INotificationHandler<Information> { public Task Handle(Information notification, CancellationToken cancellationToken) { _logger.LogInformation($"InformationHandler Received: {notification}. {DateTimeOffset.Now}"); return Task.CompletedTask; } }
- 建立一个控制器MediatorController类
[ApiController] [Route("[controller]")] public class MediatorController(ILogger<MediatorController> _logger, IMediator mediator) : ControllerBase { [HttpGet(Name = "Test")] public string Test() { var information = new Information("This is a message from controller."); mediator.Publish(information); _logger.LogInformation($"{DateTimeOffset.Now} : MediatorController Send: {information}."); return $"Ok"; } }
OK了,可以运行测试下了,结果如下: