组件解析器通过 environment 扩展组件框架,以将组件网址解析为组件。
组件管理器通过在相关环境中查找支持匹配网址协议的解析器,并使用 fuchsia.component.resolution.Resolver 协议发送请求,来解析组件网址。
如果解析成功,组件解析器会返回 ComponentDecl,即组件清单的 FIDL 表示法。如果正在解析的组件具有关联的软件包,组件解析器还会返回软件包目录的 fuchsia.io.Directory 句柄。
提供解析器功能
如需提供解析器功能,组件必须声明 resolver 功能,其 path 指定一个 FIDL 协议,该协议实现从组件的 传出目录提供的 fuchsia.component.resolution.Resolver。
{
capabilities: [
{
resolver: "my_resolver",
path: "/svc/fuchsia.component.resolution.Resolver",
},
],
}
组件管理器会提交请求,以将组件网址解析为此协议。
路由解析器功能
组件通过向其父级公开解析器功能并向其子级提供解析器功能来路由解析器功能。
如需详细了解框架如何路由组件功能,请参阅功能路由。
公开
公开解析器功能可让组件的父级访问该功能:
{
expose: [
{
resolver: "my_resolver",
from: "self",
},
],
}
成为协作者
提供解析器功能可让子组件访问该功能:
{
offer: [
{
resolver: "my_resolver",
from: "self",
to: [ "#child-a" ],
},
],
}
注册组件解析器
组件解析器通过其环境提供给组件。如需在环境中注册新的解析器,请向 environments 声明的 resolvers 部分添加一个新条目:
environments: [
{
name: "my-environ",
extends: "realm",
resolvers: [
{
resolver: "my_resolver",
scheme: "my-scheme",
from: "parent",
}
],
},
]
已注册的解析器将用于解析网址协议与提供的 scheme 匹配的组件网址。
如需详细了解如何将环境应用于组件,请参阅环境文档。
框架解析器
组件框架提供以下内置组件解析器,以支持标准 Fuchsia 网址协议:
| 解析器 | 网址格式 |
|---|---|
boot_resolver |
fuchsia-boot |
base_resolver |
fuchsia-pkg |
full_resolver |
fuchsia-pkg |