MASA Framework -- EventBus入门与设计( 三 )

  1. 注册EventBus并使用验证中间件ValidatorMiddleware
builder.Services.AddEventBus(eventBusBuilder=>eventBusBuilder.UseMiddleware(typeof(ValidatorMiddleware<>)));
  1. 添加注册用户验证类RegisterUserEventValidator.cs
public class RegisterUserEventValidator : AbstractValidator<RegisterUserEvent>{    public RegisterUserEventValidator()    {        RuleFor(e => e.Account).NotNull().WithMessage("用户名不能为空");        RuleFor(e => e.Email).NotNull().WithMessage("邮箱不能为空");        RuleFor(e => e.Password)            .NotNull().WithMessage("密码不能为空")            .MinimumLength(6)            .WithMessage("密码必须大于6位")            .MaximumLength(20)            .WithMessage("密码必须小于20位");    }}编排EventBus 支持事件编排,它们可以用来处理一些对执行顺序有要求的业务,比如: 注册用户必须成功之后才可以发送注册邮件通知,发送奖励等等,那我们可以这样做
将注册用户业务拆分为三个Handler,并通过指定Order的值来对执行事件排序
public class UserHandler{    private readonly ILogger<UserHandler>? _logger;    public UserHandler(ILogger<UserHandler>? logger = null)    {        _logger = logger;    }    [EventHandler(1)]    public void RegisterUser(RegisterUserEvent @event)    {        _logger?.LogDebug("-----------{Message}-----------", "检测用户是否存在并注册用户");        //todo: 编写注册用户业务    }    [EventHandler(2)]    public void SendAwardByRegister(RegisterUserEvent @event)    {        _logger?.LogDebug("-----------{Account} 注册成功 {Message}-----------", @event.Account, "发送注册奖励");        //todo: 编写发送奖励等    }    [EventHandler(3)]    public void SendNoticeByRegister(RegisterUserEvent @event)    {        _logger?.LogDebug("-----------{Account} 注册成功 {Message}-----------", @event.Account, "发送注册成功邮件");        //todo: 编写发送注册通知等    }}SagaEventBus支持Saga模式
MASA Framework -- EventBus入门与设计

文章插图
具体是怎么做呢?
[EventHandler(1, IsCancel = true)]public void CancelSendAwardByRegister(RegisterUserEvent @event){    _logger?.LogDebug("-----------{Account} 注册成功,发放奖励失败 {Message}-----------", @event.Account, "发放奖励补偿");}

经验总结扩展阅读