最近在一个已经写了两个本地事件订阅的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
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)