直接 import 是静态的、编译期绑定的,而 Cordis 的通信建立在服务发现与类型化事件之上,二者解决的是不同层面的问题。
在 Cordis 中,插件通过键名查找所需服务,而不是在文件顶部 import 某个具体实现。这意味着消费方只依赖契约(接口与服务名),不依赖实现包。更换底层实现时,消费方代码无需任何改动,只需在配置层调整对应键位即可,实现了实现与消费的完全解耦。
服务之间通过 TypeScript 声明合并注册事件名,再按五种模式分发:emit(广播通知,不等待)、parallel(并行扇出)、serial(按序执行直到有结果)、bail(短路,遇返回值即停)、waterfall(瀑布流,监听器排成链,每个都可拦截或修改后传递给下一个)。这使得插件间的通信既有明确类型约束,又能灵活表达从"发后即忘"到"中间件链"的各种交互形态。
由于通信不依赖具体的实现引用,系统中没有任何一个组件是"特权核心"。模型适配器、工具注册表、会话日志乃至主循环本身都是普通插件,开发者可以随时在配置层替换其中任意一项,而无需修改核心代码,这正是"一切皆插件"得以成立的通信基础。