使用@SubscribeCommand装饰器或@SubscribeQuery装饰器装饰的执行者类,命令总线或查询总线在收到指令之后,会自动找到订阅该指令的执行者来执行。
但是在一次组件开发中,发生一个情况,明明使用了装饰器,却没有被总线收集起来,执行命令时提示总线找不到执行者。
经过很长一段时间排查,终于找到问题所在。
组件对外暴露的入口文件:src/index.ts中,必须导出这个执行者,才能被引用。
因为@SubscribeCommand装饰器或@SubscribeQuery装饰器是基于Midwayjs框架提供的自定义装饰器实现的,所以执行者除了要被@SubscribeCommand或SubscribeQuery装饰以外,还需要用到@Provide装饰器。加了这个之后,才能被容器扫描到。总线中是从容器中获取执行者实例的。
总结:
1、执行者需要@SubscribeCommand或@SubscribeQuery订阅指令
2、组件中的执行者需要在src/index.ts中导出
3、执行者需要@Provide加入到容器