運作範圍

元件執行個體可能包含子項 因此,系統通常會將領域視為元件執行個體,並連同其子項組合。

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

  • 方法是使用元件資訊清單中的 expose 宣告。
  • 子領域的內部結構對父項元件執行個體不透明。舉例來說,子領域可分為一或多個元件執行個體,而從父項元件例項的角度來看,這看起來會與子領域「公開」同一組功能相同。

領域也會做為「擁有權邊界」,也就是說,子項元件執行個體是子項元件的根層級,負責管理父項領域。詳情請參閱子項元件執行個體

範例

以下是具備轉送能力的領域範例:


領域範例

在這個範例中,shell 元件有兩個子項:toolsservicesservices 有兩個子項:loggerecho,而 tools 有一個子項 echo_tool。元件會封裝其子項,雖然 shell 元件會看見自己的子項,但本身與子子項沒有 echo_toolloggerecho 的直接知識。然而,這些元件執行個體全都會視為 shell 領域的一部分。

箭頭代表fuchsia.Echo服務能力在領域從 echo 轉送至 echo_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 會將 fuchsia.Console 公開給其父項 shell,由其提供其給 (tools)fuchsia.Console 就會可供集合中的任何元件執行個體使用,以供「使用」,不需要分別轉送至動態執行個體。

環境

每個運作範圍都會獲派一個「環境」,這個環境可以設定架構在領域中元件的某些選擇。舉例來說,執行器功能會註冊至環境,讓領域中的元件執行個體可供存取。請參閱環境,瞭解可以透過環境設定哪些屬性。

Realm 架構通訊協定

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