配置功能

借助配置功能,组件可以定义、路由和使用配置 值。使用配置 capability 的组件会在其结构化配置中看到该值。

定义配置功能

如需定义配置 capability,组件必须为其添加 capabilities 声明:

{
    capabilities: [
        {
            config: "fuchsia.config.MyBool",
            type: "bool",
            value: true,
        },
    ],
}

这定义了类型为 bool 且值为 true 的功能 fuchsia.config.MyBool。 如需了解详情,请参阅功能参考文档 针对 typevalue 支持的字段。

路由配置功能

组件通过将配置功能公开给其 或“提供”给子女。

如需详细了解该框架如何路由组件功能, 请参阅功能路由

公开

公开一个配置 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 的值。

您可以选择性地指定:

重命名

您可以使用其他名称exposeoffer功能:

{
    offer: [
        {
            config: "fuchsia.config.MyBool",
            from: "#child-a",
            to: [ "#child-b" ],
            as: "fuchsia.childB.SayHello",
        },
    ],
}

配置类型

配置值支持多种类型。

无符号整数有以下类型:

  • uint8
  • uint16
  • uint32
  • uint64

有符号整数有以下类型:

  • int8
  • int16
  • int32
  • int64

bool 类型支持值 truefalse

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!",
            ],
        },
    ],
}

可选路由

适用于配置功能的 UseOfferExpose 支持可用性。这意味着 组件可以 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) 停止并启动正在使用配置功能的组件。