Table of Contents

插件模型

插件是平台的扩展机制:以编排一等公民身份进入请求管线——与内置步骤同一管线、 同一编译校验、同一目录,随配置世代发布热切换。

四个核心概念

概念 定义
包(package) 作用域单元——一份 DI 容器、一份 SDK 注入、一次启停、一个私有存储子树
feature 编排单元——包内一个可编入链的功能(一包可含 n 个 feature,数据全共享)
命名空间(ns) 隔离与协作域——{ns}/{name}/{version} 身份;存储子树/事件话题/私有槽位随 ns 划界
catalog 键 {ns}/{name}/{code}——feature 的编排执行单元唯一标识

双单元形态

单元 锚点 语义
管线特性 HttpFeatureBase 等基类 编入链当 step(请求处理)
后台任务 IPluginBackgroundTask 托管长任务(共享线程多路复用——非独占线程)

两者都实现 IPluginFeature(唯一扫描锚点,零成员)——扫描器一次扫描、按次级契约 分类进 catalog 或托管池。code 绑定三级回落:特性 [PluginFeature] → 清单元数据 → 裸类名。

发现与生效

  1. 安装——包落卷(TierFs write-once)+清单注册;
  2. 启用——租户面 plugin 实体 draft→publish(无热改旁路);
  3. 发现——装载期扫描特性+后台任务,汇入 FeatureCatalog(目录=内置+ 本租户已启用插件的 feature 全集);
  4. 编排——画布 palette/CLI 从 catalog 消费;插件步骤与内置步骤同链同校验;
  5. 切换——插件变更走 draft→publish 热切换,不停机。

安全三层

层 机制
能力声明制 清单 capabilities 未声明→SDK 桥不注册→构造解析即失败
ALC 程序集白名单 插件间只共享 Contracts+框架程序集——跨插件强转物理不可行
ns 边界 存储/事件/槽位按命名空间划界——跨 ns 仅 public 槽可达

分发

  • 平台域(platform)——平台公共面,租户可见性按三形态过滤;
  • 租户私有域(tenant)——本租户锚签名+ALC 禁用形态,配额闸(包数/包体积/托管进程);
  • 包仓库/签名信任/远端目录见包仓库与信任。