設定功能可讓元件定義、轉送及使用設定值。使用設定能力的元件會看到該值出現在其結構化設定中。
定義設定功能
如要定義設定能力,元件必須為其新增 capabilities
宣告:
{
capabilities: [
{
config: "fuchsia.config.MyBool",
type: "bool",
value: true,
},
],
}
這會定義 bool
類型的能力 fuchsia.config.MyBool
,其值為 true
。如要進一步瞭解 type
和 value
支援的欄位,請參閱功能參考資料。
轉送設定功能
元件會將設定功能exposing給父項,或提供至其子項,藉此轉送設定功能。
如要進一步瞭解架構路徑元件功能,請參閱「功能轉送」。
公開
公開設定能力可讓元件的父項存取該能力:
{
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
的值。
您可以選擇指定:
重新命名
您可以透過不同的名稱來 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
有支援 true
或 false
值的 bool
類型。
設定為 string
類型,因此除了字串值外,也必須設定 max_size
。
字串範例:
{
capabilities: [
{
config: "fuchsia.config.MyString",
type: "string",
max_size: 100,
value: "test",
},
]
}
是 vector
類型,該類型必須包含 type
的 element
欄位。向量可包含向量以外的所有其他類型。
向量範例:
{
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
使用設定能力。詳情請參閱使用選用功能一文
解決路線和無效路線
系統會在元件啟動時,將結構化設定值提供給元件。這表示元件架構必須在啟動元件之前解析設定功能的所有路徑。
這個副作用表示元件架構無法啟動具有設定能力的「毀損路徑」(路徑未成功結束於能力定義) 的元件。舉例來說,如果您要求 fuchsai.config.MyBool
,但家長未提供這項服務,就無法啟動。這與其他功能不同,在執行階段發現元件可能不存在。
正在更新設定值
由於設定值會在元件啟動時交給元件,因此如果能力路徑在元件執行期間發生變更,元件就不會看到任何更新。
如要啟動具有不同設定的元件,系統必須發生以下情況:
1) 更新提供設定功能能力的 CML (可能透過重新解決問題)。 2) 停止再啟動採用設定容量的元件。