Fork me on GitHub

【库】Coravel Event Broadcasting事件广播

  Coravel 通过使高级应用程序功能(如任务/作业调度、排队、缓存、邮件(以及更多!))易于访问且易于使用,帮助开发人员快速启动并运行 .NET 应用程序。具有简单、富有表现力和直接的语法。

   Coravel引入一个广播事件机制,可以通过简单的事件注册,事件订阅,完成一个广播。下面是一个修改密码的功能,修改成功后可以通过站内通知和邮件两种方式通知用户修改密码成功。

复制代码
using Coravel;
using Coravel.Events.Interfaces;
using Microsoft.AspNetCore.Mvc;
using System.Xml.Linq;

var builder = WebApplication.CreateBuilder(args);
//注入相关的服务
builder.Services.AddEvents();
builder.Services.AddTransient<UserService>();
builder.Services.AddTransient<MessageNotify>();
builder.Services.AddTransient<EmailNotify>();

var app = builder.Build();
//注册事w年,订阅事件
var registration = app.Services.ConfigureEvents();
registration
    .Register<UserChangePassword>()
    .Subscribe<MessageNotify>()
    .Subscribe<EmailNotify>();


app.MapPost("/changepassword", async ([FromServices] UserService userService, [FromBody] UserChangePassword changePassword) =>
{
    return await userService.ChangePassword(changePassword);
});

app.Run();

public class UserChangePassword: IEvent
{
    public string Name { get; set; }
    public string UserName { get; set; }
    public string NewPassword1 { get; set; }
    public string NewPassword2 { get; set; }
    public string OldPassword { get; set; }
}
public class UserService 
{
    readonly IDispatcher _dispatcher;
    public UserService(IDispatcher dispatcher)
    {
        _dispatcher = dispatcher;
    }

    public async Task<bool> ChangePassword(UserChangePassword changePassword)
    {
        //验证两个新密码是否相等,旧密码是否正确


        //持久化修改密码

        //修改密码成功后,进行广播事件
        await _dispatcher.Broadcast(changePassword);
        return true;
    }
}
public class MessageNotify : IListener<UserChangePassword>
{
    public async Task HandleAsync(UserChangePassword changePassword)
    {
        Console.WriteLine($"{changePassword.Name}您好,你于{DateTime.Now.ToString("yyyy年MM月dd日HH时mm分")}进行了修改密码!");
        await Task.CompletedTask;
    }
}
public class EmailNotify : IListener<UserChangePassword>
{
    public async Task HandleAsync(UserChangePassword changePassword)
    {
        Console.WriteLine($"{changePassword.Name}您好:\r\n这是一封通知你修改密码的邮件!");
        await Task.CompletedTask;
    }
}
复制代码

  Coravel主打一个简单,通过事件发布与订阅,优雅地解耦了不同的功能,并且还为后期增加订阅方式提供了可能。

  文章来源微信公众号

  想要更快更方便的了解相关知识,可以关注微信公众号 

posted @   桂素伟  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示