使用@SubscribeCommand装饰器或@SubscribeQuery装饰器装饰的执行者类,命令总线或查询总线在收到指令之后,会自动找到订阅该指令的执行者来执行。

    但是在一次组件开发中,发生一个情况,明明使用了装饰器,却没有被总线收集起来,执行命令时提示总线找不到执行者。

    经过很长一段时间排查,终于找到问题所在。
    组件对外暴露的入口文件:src/index.ts中,必须导出这个执行者,才能被引用。

    因为@SubscribeCommand装饰器或@SubscribeQuery装饰器是基于Midwayjs框架提供的自定义装饰器实现的,所以执行者除了要被@SubscribeCommand或SubscribeQuery装饰以外,还需要用到@Provide装饰器。加了这个之后,才能被容器扫描到。总线中是从容器中获取执行者实例的。

    总结:
    1、执行者需要@SubscribeCommand或@SubscribeQuery订阅指令
    2、组件中的执行者需要在src/index.ts中导出
    3、执行者需要@Provide加入到容器