组件管理器通过在相关环境中查找支持匹配网址架构的解析器,并使用 fuchsia.component.resolution.Resolver
协议发送请求来解析组件网址。
如果解析成功,组件解析器会返回 ComponentDecl
,即组件清单的 FIDL 表示法。如果要解析的组件具有关联的软件包,组件解析器还会返回软件包目录的 fuchsia.io.Directory
句柄。
提供解析器功能
如需提供解析器功能,组件必须声明 resolver
功能,其 path
用于指定实现 fuchsia.component.resolution.Resolver
的 FIDL 协议,该协议从组件的
{
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 |