運作範圍

元件執行個體可以包含子項 因此,一般來說,將領域視為元件執行個體及其子項組合很常見。

運作範圍在元件架構中扮演特殊角色,領域是元件執行個體的封裝邊界。因此:

  • 方法是透過元件資訊清單中的 expose 宣告來完成。
  • 子運作範圍的內部結構與父項元件執行個體不透明。舉例來說,子領域可以是一或多個元件執行個體,從父項元件執行個體的角度來看,只要子領域「公開」同一組功能即可。

同時範圍也會做為「擁有權邊界」,也就是說,子元件執行個體是擁有者擁有的子領域根,且該範圍會控管其是否存在。詳情請參閱「子元件執行個體」一節。

範例

以下是具有功能轉送功能的領域範例:


運作範圍範例

在這個範例中,shell 元件有兩個子項:toolsservicesservices 有兩個子項,loggerecho;而 tools 有一個子項 echo_tool。元件會封裝子項,因此 shell 元件可以看到自己的子項,但不具備其子子項的 echo_toolloggerecho 的直接瞭解。儘管如此,所有這些元件執行個體都會視為 shell 領域的一部分。

箭頭說明 fuchsia.Echo 服務能力的路徑,該領域從 echoecho_tool。向上箭頭對應於 expose 宣告,向下箭頭則代表 offer 宣告。expose 宣告會導致 fuchsia.Echo 在相應領域的能力邊界外公開。例如,如果 services 未公開 fuchsia.Echoshell 就無法得知 fuchsia.Echo 存在,也無法向子項提供服務或在執行階段存取服務。

如需此範例的能力轉送詳細說明,請參閱元件資訊清單能力轉送範例

子元件執行個體

元件執行個體可能包含子項。子項元件執行個體會視為父項執行個體定義的一部分,並完全由父項擁有。這會產生下列影響:

  • 元件執行個體可以決定其包含的子項,以及其子項的建立及刪除時間。
  • 如果沒有父項,元件執行個體就不能存在。
  • 元件執行個體除非父項正在執行,否則無法執行。
  • 元件執行個體會對子項發出 offer 宣告,決定子項可使用的功能。
  • 元件執行個體可以控管其子項的行為。舉例來說,元件執行個體可能會透過 Realm 架構服務繫結至從子項運作領域公開的功能,或是設定掛鉤以攔截子項生命週期事件。不過,這個控制項並不是絕對的。例如,元件執行個體無法使用未明確公開的子領域能力。

子項元件執行個體分為靜態動態兩種類型。

靜態子項

「靜態子項」是一種元件執行個體,透過 children 宣告,在元件的資訊清單中以靜態方式宣告。這個宣告是必要程序,且足以建立子項元件執行個體存在。

一般而言,除非子項有動態的理由,否則應以靜態方式宣告子項 (請參閱動態子項)。以靜態方式宣告子項時,可以稽核其定義和功能,並以靜態方式轉送子項的功能。

靜態的子項通常是由兩種資訊定義:

  • 子執行個體的名稱。該名稱是父項元件執行個體的本機名稱,用於形成「monikers」。宣告多個具有相同網址和名稱的子項是有效的。
  • 子項執行個體的元件網址

如要瞭解如何為子項宣告提供其他設定資訊,請參閱子項

孩童動態

「動態子項」是在執行階段期間建立的元件集合中建立的元件執行個體。動態子項一律會限定為特定集合。動態子項可用於支援元件執行個體存在或基數的用途。舉例來說,測試領域可能會宣告可在當中建立測試元件執行個體的集合。

建立動態子項的中繼資料大多與宣告靜態執行個體的中繼資料相同,只是在執行階段提供。動態子項的名稱會在其集合中隱含地限定在集合中;因此,您可以在兩個不同集合中具有相同名稱的兩個動態子項。

無法從動態執行個體中靜態轉送功能。這是固有的限制,因為無法從動態執行個體公開的能力以靜態方式宣告路徑。不過,某些功能可從整個集合轉送。待辦事項:服務目錄做為範例

元件集合

「集合」動態子項的容器,可在執行階段使用 Realm 架構服務建立及刪除。

集合支援兩種耐用性模式:

  • 暫時性:當包含集合的執行個體停止時,「暫時性」集合中的執行個體會自動刪除。
  • 單一執行單次執行集合中的執行個體會在建立時啟動,並在停止時刪除。這表示單一執行集合中的執行個體只能執行一次。

如要進一步瞭解元件的執行與持續性,請參閱「lifecycle」。

集合會在元件資訊清單的 collections 區段中宣告。當 offer 宣告指定集合時,該功能提供給集合中的每個執行個體都可以使用所提供的功能。部分功能可以在整個集合公開或提供,做為匯總集合中執行個體所公開的對應功能。

待辦事項:服務目錄做為範例

範例

下圖說明包含集合的領域:


集合範例

在這個範例中,shell 元件宣告靜態子項 console 和以灰色背景醒目顯示的集合 (tools) (() 標記代表集合)。(tools) 包含兩個動態執行個體:lsgrep。這些執行個體是 shell 的動態子項,範圍限定為 (tools)。使用集合表示,無法事先得知 lsgrep 是否存在。想像一下,如果 lsgrep 是指令列工具,會在使用者要求時依需求例項化。

範例中也以箭頭說明能力轉送路徑。首先,console 會向其父項 shell 公開 fuchsia.Console,後者會提供(tools)。接著,fuchsia.Console 可用於集合中的任何元件執行個體,以供「使用」使用,而不需要獨立轉送至動態執行個體。

環境

每個運作範圍都會獲派一個「環境」,其中包含了架構中元件對元件所做的特定選擇。舉例來說,執行器功能會註冊至環境,因此領域中的任何元件執行個體皆可使用。如要瞭解可透過環境設定的屬性,請參閱環境相關說明。

運作範圍架構通訊協定

每個元件 fuchsia.component.Realm 都有可用的架構通訊協定Realm 通訊協定為元件執行個體提供 API,用於管理其領域中的子項,例如:繫結至子項和建立動態子項。如需完整說明文件,請參閱連結的 FIDL 定義。