net8实现MediatR小示例C#

发布时间 2024-01-13 00:10:45作者: Bruce_Cheung

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 });
View Code
  • 新建一个Information类
public record Information (string Info) : INotification;
View Code
  • 建立一个处理器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;
        }
    }
View Code
  • 建立一个控制器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";
        }
    }
View Code

OK了,可以运行测试下了,结果如下: