首页 > 其他分享 >ABP VNext事件总线-本地事件

ABP VNext事件总线-本地事件

时间:2023-06-26 23:55:25浏览次数:32  
标签:VNext 订阅 localEventBus ABP 事件 本地 logger public

1、本地事件分为发布事件和订阅事件,其中,发布事件和订阅事件都必须要注册到ID中,使用接口 ITransientDependency 来注册,方便让事件总线发现并注册他们。

2、发布事件需要使用ID获取ILocalEventBus 服务,在定义一个发布方法之后,使用该服务的 PublishAsync() 方法来发布事件

// 定义一个本地事件
public class HelloEvent : LocalEto
{
    public string Name { get; set; }
}

// 发布一个本地事件
public class HelloService : ApplicationService
{
    private readonly ILocalEventBus _localEventBus;

    public HelloService(ILocalEventBus localEventBus)
    {
        _localEventBus = localEventBus;
    }

    [UnitOfWork] // 添加这个属性来创建一个工作单元范围
    public virtual async Task SayHelloAsync(string name)
    {
        // 发布一个本地事件
        await _localEventBus.PublishAsync(new HelloEvent
        {
            Name = name
        });
    }
}

3、订阅事件需要继承ILocalEventHandler<发布实体Dto> ,和注入ID,ITransientDeoendency   

// 订阅一个本地事件
public class HelloEventHandler : ILocalEventHandler<HelloEvent>, ITransientDependency // 使用这个接口来注册到依赖注入中
{
    private readonly ILogger<HelloEventHandler> _logger;

    public HelloEventHandler(ILogger<HelloEventHandler> logger)
    {
        _logger = logger;
    }

    public virtual Task HandleEventAsync(HelloEvent eventData) // 添加 virtual 关键字来确保正确调用
    {
        // 处理本地事件
        _logger.LogInformation($"Hello, {eventData.Name}!");
        return Task.CompletedTask;
    }
}

 最后:当触发发布事件SayHelloAsync方法后,订阅事件将会自动触发。完美!

 

标签:VNext,订阅,localEventBus,ABP,事件,本地,logger,public
From: https://www.cnblogs.com/xiangshifu/p/17507499.html

相关文章

  • 第10章 高级事件(下)
    index.html<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv=&quo......
  • SpringBoot事件机制
    1、是什么?SpringBoot事件机制是指SpringBoot中的开发人员可以通过编写自定义事件来对应用程序进行事件处理。我们可以创建自己的事件类,并在应用程序中注册这些事件,当事件被触发时,可以对其进行处理。在SpringBoot中,事件可以是任意类型的,可以是基于Spring的事件,也可以是自定义的事......
  • 【Azure 事件中心】Kafka 生产者发送消息失败,根据失败消息询问机器人得到的分析步骤
    问题描述AzureEventHubs--Kafka生产者发送消息存在延迟接收和丢失问题,在客户端的日志中发现如下异常:2023-06-0502:00:20.467[kafka-producer-thread|producer-1]ERRORcom.deloitte.common.kafka.CommonKafkaProducer-messageId:9235f334-e39f-b429-227e-45cd30dd6486......
  • 【Azure 事件中心】Kafka 生产者发送消息失败的分析步骤
    问题描述AzureEventHubs--Kafka生产者发送消息存在延迟接收和丢失问题,在客户端的日志中发现如下异常:2023-06-0502:00:20.467[kafka-producer-thread|producer-1]ERRORcom.deloitte.common.kafka.CommonKafkaProducer-messageId:9235f334-e39f-b429-227e-45cd30dd......
  • JQ 合成事件
    style.css*{margin:0;padding:0;} body{font-size:13px;line-height:130%;padding:60px}#panel{width:300px;border:1pxsolid#0050D0}.head{padding:5px;background:#96E555;cursor:pointer}.content{padding:10px;text-indent:2em;border-......
  • JQ 事件对象的属性
    demo.html<html><head><title>event.type</title><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><scriptsrc="js/jquery-1.10.1.min.js"type="text/javascript">......
  • JQ 移除事件
    demo.html<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title></title><styletype="text/css">*{margin:0;padding:0;} body{font-size:13px;line-hei......
  • JQ 其它的点击事件用法
    demo.html<html><head><title></title><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><style>.over{ color:red; background:#888;}</style><scriptsrc="js/j......
  • Visual Basic(简称VB)是一种编程语言,由微软公司开发。它是基于事件驱动的编程语言,主要用
    VisualBasic(简称VB)是一种编程语言,由微软公司开发。它是基于事件驱动的编程语言,主要用于Windows操作系统上的应用程序开发。在VisualBasic中,可以使用图形用户界面(GUI)来创建各种应用程序,包括桌面应用程序、数据库应用程序、Web应用程序等。VisualBasic提供了许多现成的控件和工......
  • Vue事件总线
    下面是一个使用Vue事件总线实现两个组件间通信的完整例子:假设我们有两个组件A和B,需要在它们之间进行通信。具体来说,当组件A中的按钮被点击时,需要向组件B发送一个事件,使得组件B中的数据被更新。创建EventBus首先,在Vue应用中创建一个EventBus,通常可以在main.js......