abpvnext关于事件发布和订阅的注意事项

在ABP框架中,作者遇到本地事件订阅无法生效的问题。经过排查发现,是由于在handler类定义时未正确引入新的事件类。修复这个问题后,事件订阅即能正常工作。文章强调了在实现事件发布和订阅时,正确引用和实现ILocalEventHandler接口的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在一个已经写了两个本地事件订阅的handler类上添加一个事件订阅方法,并实现自己想要的业务逻辑。但是调试了n多次就是看不到接收消息的效果。 后来忙着做老系统业务去了就暂时没关注这个问题了。今天又来调试这个问题,然后刚才打开abp官网看了一眼,突然看到一句话

本地订阅事件文档里一句话“一个服务可以实现 ILocalEventHandler<TEvent> 来处理事件.”。参考链接:Local Event Bus | Documentation Center | ABP.IO 。我检查了一下自己的handler类,看看类定义时是否继承引入了那个订阅不出来的新的事件。

结果一看,确实是在handler类定义这里少引用了一个本地事件类。我下面实现代码有写3个事件订阅,但是这里只引用了2个事件类, 如下图所示

 

找到原因后我就给类添加上引用新的事件类引用代码  ,ILocalEventHandler<PublishTenantToDataDic>

加上这个引用之后,我新加的订阅立马就能进入调试断点了。

如下图所示:

 


总结:

abpvnext实现事件发布时,需要注入ILocalEventBus,代码如:

 public class MyService : ITransientDependency
    {
        private readonly ILocalEventBus _localEventBus;

        public MyService(ILocalEventBus localEventBus)
        {
            _localEventBus = localEventBus;
        }
        
        public virtual async Task ChangeStockCountAsync(Guid productId, int newCount)
        {
            //TODO: IMPLEMENT YOUR LOGIC...
            
            //PUBLISH THE EVENT
            await _localEventBus.PublishAsync(
                new StockCountChangedEvent
                {
                    ProductId = productId,
                    NewCount = newCount
                }
            );
        }
    }

在另一端写代码订阅接收事件时,也要注意引入ILocalEventHandler,代码如:

 public class MyHandler
        : ILocalEventHandler<StockCountChangedEvent>,
          ITransientDependency
    {
        public async Task HandleEventAsync(StockCountChangedEvent eventData)
        {
            //TODO: your code that does somthing on the event
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值