跳到主要内容
版本:0.3.x(Latest)

基本介绍

ManifestService为插件提供对manifest/目录下原始资源文件的只读访问。插件通过services.Manifest()获取该服务,用于读取profile.yamlconfig/config.example.yamli18n/zh-CN/plugin.jsonsql/*.sql等插件自有文件。

该服务与ConfigService互补:ConfigService读取经过优先级解析的插件配置值,ManifestService读取manifest/下的原始文件内容。

设计思路

ManifestService的核心设计是原始资源读取。它提供三种访问模式:

  • Get:读取原始字节内容,适用于任意格式的资源文件
  • Exists:检查资源是否存在,适用于条件判断
  • Scan:将YAML资源反序列化到目标结构体,适用于结构化配置

路径语义是相对manifest/的斜杠分隔路径。例如:

路径实际文件说明
profile.yamlmanifest/profile.yaml插件简介
config/config.example.yamlmanifest/config/config.example.yaml配置模板
i18n/zh-CN/plugin.jsonmanifest/i18n/zh-CN/plugin.json中文语言包
sql/install.sqlmanifest/sql/install.sql安装脚本
resources/policy.yamlmanifest/resources/policy.yaml策略配置

对于源码插件,manifest/资源通过plugin_embed.go嵌入编译产物。ManifestService从嵌入的文件系统中读取。对于动态插件,资源随.wasm产物打包,运行时绑定到当前有效发布版本。

架构位置

ManifestService在插件生命周期的多个阶段被使用:

该服务与以下服务形成互补关系:

  • ConfigServiceConfigService读取经过优先级解析的配置值,ManifestService读取原始配置文件
  • I18nServiceI18nService在运行时翻译,ManifestService可以读取语言包原始文件

主要能力

方法说明
Get读取manifest/下指定路径的原始字节内容
Exists检查manifest/下指定路径的资源是否存在
Scan将YAML资源(或其中的嵌套键)反序列化到目标结构体

设计约束

  • 路径相对manifest/ 不要写成manifest/profile.yaml,应写成profile.yaml
  • 只读取原始资源。 ManifestService只负责读取文件内容,不负责让资源"生效"。读取SQL脚本不等于执行安装,读取语言包不等于注册翻译。
  • config.example.yaml不参与默认读取。 它是配置模板,不是运行时默认值。ConfigService的默认值来自manifest/config/config.yaml
  • 插件只能读取自己的资源。ConfigService类似,ManifestService是插件作用域的,不能读取其他插件的manifest/

相关服务

  • ConfigService - 读取经过优先级解析的插件配置值
  • I18nService - 运行时翻译能力,语言包文件通过ManifestService读取