設定功能

設定功能可讓元件定義、路由及使用設定值。使用設定功能的元件會在其結構化設定中看到該值。

定義設定功能

如要定義設定能力,元件必須新增 capabilities 宣告 :

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

這會以 true 的值定義 bool 類型的 fuchsia.config.MyBool 能力。 詳情請參閱功能參考資料 請參閱 typevalue 支援的欄位。

轉送設定功能

元件路徑設定功能,方法是將公開元件至 家長或為他們提供福利給孩子。

如要進一步瞭解架構如何轉送元件功能, 請參閱功能轉送

公開

公開設定功能可讓元件的父項存取該功能:

{
    expose: [
        {
            config: "fuchsia.config.MyBool",
            from: "self",
        },
    ],
}

您可以選擇指定下列項目:

提供

提供設定功能可讓子元件存取該功能:

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

您可以選擇指定下列項目:

使用設定功能

如要使用設定功能,元件必須新增 use 定義,將功能連結至結構化設定值。接著,元件就能讀取 實作結構化設定,查看能力的值

請考慮使用下列結構化設定區塊的元件: json5 { config: { say_hello: { type: "bool" }, }, }

如要使用設定功能,請為其新增 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 類型,必須一併設定含有 typeelement 欄位。向量可以 包含所有其他類型的類型 (向量除外)。

向量範例:

{
    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 使用設定能力。詳情請參閱使用選用功能

預設值

如果選擇轉送設定能力,則來自 void 的路徑表示 系統會提供預設值如果未提供預設值,就會發生指定選用設定功能的錯誤。

您可以透過兩種方式指定預設值。

在 CML 檔案中定義預設值

定義預設值最簡單的方式,就是在 CML 中使用 default 關鍵字指定預設值。

例如:

{
    use: {
        config: "fuchsia.config.MyInt",
        key: "my_int",
        type: "int8",
        availability: "optional",
        default: 42,
    }
}

如果已轉送,fuchsia.config.MyInt 會收到預設值 42 出發地:void

系統一律會採用 CML 檔案的預設值,而非下一個章節中定義的結構化設定預設值。

(舊版) 結構化設定做為預設值

舊版定義預設值的方式,是將預設值納入元件套件中,做為結構化設定。

例如:

{
    use: {
        config: "fuchsia.config.MyInt",
        key: "my_int",
        type: "int8",
        availability: "optional",
    }
    config: {
        my_int: {
            type: "int8"
        },
    }
}

在上例中,fuchsia.config.MyInt 會用於 my_int,並與 config 區塊中的設定值相符。接著,開發人員就能 現有的結構化設定工具 元件套件中,將要用作預設值的設定檔 值。

請注意,這種做法一律會在 CML 檔案中直接指定 default: 而遭到覆寫。

解決路徑和損壞路線

結構化設定值會在元件啟動時交給元件。這表示元件架構必須解析 才能啟動該元件

這項副作用表示元件架構無法啟動 路徑(未成功以 能力定義)。舉例來說,如果您要求 fuchsai.config.MyBool,但家長未提供,您就無法開始使用。這與其他功能不同,因為元件會在執行階段發現可能不存在的功能。

更新設定值

由於設定值啟動時會交給元件,因此元件 如果能力路徑在元件執行期間有所變更,將不會出現任何更新。

如要啟動採用不同設定的元件,您必須符合以下條件: 發生:

1) 更新提供設定功能的 CML (可能會透過重新解析來更新)。2) 停止,然後啟動正在使用設定能力的元件。