借助配置功能,组件可以定义、路由和使用配置 值。使用配置 capability 的组件会在其结构化配置中看到该值。
定义配置功能
如需定义配置 capability,组件必须为其添加 capabilities
声明:
{
capabilities: [
{
config: "fuchsia.config.MyBool",
type: "bool",
value: true,
},
],
}
这定义了类型为 bool
且值为 true
的功能 fuchsia.config.MyBool
。
如需了解详情,请参阅功能参考文档
针对 type
和 value
支持的字段。
路由配置功能
组件通过将配置功能公开给其 或“提供”给子女。
如需详细了解该框架如何路由组件功能, 请参阅功能路由。
公开
公开一个配置 capability 可让组件的父项访问该 capability 功能:
{
expose: [
{
config: "fuchsia.config.MyBool",
from: "self",
},
],
}
您可以选择性地指定:
成为协作者
提供配置功能可让子组件能够访问 功能:
{
offer: [
{
config: "fuchsia.config.MyBool",
from: "parent",
to: [ "#child-a", "#child-b" ],
},
],
}
您可以选择指定以下内容:
使用配置功能
如需使用配置 capability,组件必须添加一个 use
定义,将 capability 与结构化配置值相关联。然后,该组件将能够在运行时读取其结构化配置,以查看 capability 的值。
请考虑以下结构化配置块的组件:json5
{
config: {
say_hello: { type: "bool" },
},
}
如需使用配置 capability,请为其添加 use
声明:
{
use: [
{
config: "fuchsia.config.MyBool",
key: "say_hello",
from: "parent",
},
],
}
当组件读取其结构化配置的 say_hello
字段时,它将接收 fuchsia.config.MyBool
的值。
您可以选择性地指定:
重命名
您可以使用其他名称expose
或offer
功能:
{
offer: [
{
config: "fuchsia.config.MyBool",
from: "#child-a",
to: [ "#child-b" ],
as: "fuchsia.childB.SayHello",
},
],
}
配置类型
配置值支持多种类型。
无符号整数有以下类型:
uint8
uint16
uint32
uint64
有符号整数有以下类型:
int8
int16
int32
int64
bool
类型支持值 true
或 false
。
string
类型除了要设置字符串值之外,还必须设置 max_size
。
字符串示例:
{
capabilities: [
{
config: "fuchsia.config.MyString",
type: "string",
max_size: 100,
value: "test",
},
]
}
vector
类型必须包含一个 element
字段,并且还设置了 type
。矢量
包含除矢量以外的所有其他类型。
矢量示例:
{
capabilities: [
{
config: "fuchsia.config.MyUint8Vector",
type: "vector",
element: { type: "uint8" },
max_count: 100,
value: [1, 2, 3 ],
},
{
config: "fuchsia.config.MyStringVector",
type: "vector",
element: {
type: "string",
max_size: 100,
},
max_count: 100,
value: [
"Hello",
"World!",
],
},
],
}
可选路由
适用于配置功能的 Use
、Offer
和 Expose
支持可用性。这意味着
组件可以 optionally
使用配置功能。如需了解详情,请参阅使用可选功能
默认值
如果配置 capability 是可选路由的,则从 void
路由意味着将为其提供默认值。指定可选的
而无需提供默认值。
您可以通过以下两种方式指定默认值。
在 CML 文件中定义默认值
定义默认值的最简单方法是在 CML 中使用
default
个关键字。
例如:
{
use: {
config: "fuchsia.config.MyInt",
key: "my_int",
type: "int8",
availability: "optional",
default: 42,
}
}
如果 fuchsia.config.MyInt
是从 void
路由的,则会收到默认值 42
。
CML 文件默认值始终会取代下一部分中定义的结构化配置默认值。
(旧版)结构化配置作为默认值
定义默认值的传统方式是将其添加到组件的 打包为结构化配置
例如:
{
use: {
config: "fuchsia.config.MyInt",
key: "my_int",
type: "int8",
availability: "optional",
}
config: {
my_int: {
type: "int8"
},
}
}
在上述示例中,fuchsia.config.MyInt
被用作 my_int
,与 config
块中的配置值匹配。然后,开发者可以使用
现有的结构化配置工具,
作为默认配置文件的
值。
请注意,此方法始终会被直接指定 default:
CML 文件
解决路线和断开的路线
结构化配置值会在组件启动时传递给组件。 也就是说,组件框架必须解析所有 配置功能
这会产生一个副作用,即组件框架无法启动具有配置 capability 的“损坏路线”(未成功在 capability 定义中结束的路线)的组件。例如,如果你请求 fuchsai.config.MyBool
,但家长不向你提供,你将无法开始。这与其他功能不同,在其他功能中,组件会在运行时发现它可能不存在。
更新配置值
由于配置值是在组件启动时传递到组件的,因此该组件 如果功能路由在组件运行时发生更改,则不会看到任何更新。
要启动具有不同配置的组件,需要满足以下条件: 会发生以下情况:
1) 更新提供配置功能的 CML(可能通过重新解析)。 2) 停止并启动正在使用配置功能的组件。