PluginsHooksExamples

角色解析为什么必须唯一

用角色解析场景说明 resolve 为什么不能让多个 plugin 一起返回答案

角色解析为什么必须唯一

场景

宿主现在要回答一个问题:

  • 当前这个用户最终是什么角色

这时它会调用:

const role = await agent.plugins.resolve<{ userId: string }, string>(
  "auth.resolve_role",
  { userId: "owner" },
);

为什么这里不能有两个 resolver

因为如果两个 plugin 都能回答:

  • A 说是 admin
  • B 说是 member

那宿主就必须再写一层仲裁逻辑。

resolve 这个设计本来就是为了避免“再加一层仲裁”。

它的意思就是:

  • 当前这个点,必须提前决定唯一权威

所以当前实现才会这样设计

  • 重复注册同一个 resolve 点:直接报错
  • 没注册 resolver:直接报错
  • resolver 对应 plugin disabled:直接报错

这三个规则本质上是在保护一件事:

  • 最终答案必须明确

如果你其实想让多人都参与

那你大概率不应该用 resolve

更可能的正确结构是:

  • 先用 pipeline 汇总上下文
  • 最后再由一个 resolve 给最终答案

相关文档