元件會透過以下方式相互互動: 功能會結合資源存取權和一組權利,提供存取權控管和與資源互動的管道。
元件只能透過其命名空間的可探索功能和收到的少數編號句柄,與系統和其他元件互動。
能力轉送
元件會在元件資訊清單中宣告提供給系統的新功能,以及其他元件 (或架構) 提供的所需功能。元件架構會使用這些宣告來填入命名空間。
如要讓功能在執行階段可用,您必須提供有效的 由於功能通常會透過父項元件傳送至子項,因此父項元件在定義子項元件的沙箱時扮演著重要角色。
某些能力類型會導向 環境會為指派的領域設定架構行為。系統會存取並使用導向至環境的功能。元件例項無法在執行階段存取其環境中的功能。
可用性功能可讓元件宣告預期的情況,也就是預期可用功能的情況。
路由術語
路由術語可分為下列類別:
- 宣告如何在元件、元件父項和子項之間路由功能:
- 元件所消耗或提供的功能宣告:
週期偵測
元件架構會強制執行元件之間提供的功能不會形成循環。循環的簡單例子是,元件提供從子項 A
到子項 B
,以及從 B
到 A
的能力,但沒有弱選項。
系統會偵測下列項目之間的週期:
- 子項元件及其父項。
- 目前的元件及其子項。
目前的元件可執行以下操作:
use
功能,除非是提供給這些子項的功能。use
從父項取得能力。expose
將能力傳遞至父項。
如果有週期,則有幾種策略可解決這個問題。
- 將其中一個連結標示為
dependency: "weak"
。弱式功能不會視為與週期偵測或關機順序相關的依附元件。如果弱功能不存在或消失,則應將使用弱功能的元件編程,以便正確運作。 - 將其中一個元件分割為兩個沒有週期的較小元件。
- 反轉其中一個依附元件的順序。舉例來說,
A
可以使用B
的第二個能力,而非B
使用A
的功能。方法是將新的能力新增至A
和B
的資訊清單,然後將新的use
新增至A
的資訊清單。
能力類型
以下功能可進行路由:
類型 | 說明 | 已轉送至 |
---|---|---|
protocol |
用於開啟 FIDL 通訊協定所支援管道的檔案系統節點。 | 元件 |
service |
用於開啟通往多個服務例項的管道的檔案系統目錄。 | 元件 |
directory |
檔案系統目錄。 | 元件 |
storage |
可寫入的檔案系統目錄,可隔離使用該目錄的元件。 | 元件 |
dictionary |
將其他功能組合在一起的功能。 | 元件 |
resolver |
在環境中註冊時,會讓具有特定網址配置的元件透過該解析器解析的功能。 | environments |
runner |
在環境中註冊時,這項能力可讓架構在啟動元件時使用該執行元件。 | environments |
範例
請參考以下範例,瞭解如何透過元件執行個體樹狀結構結構進行能力轉送:
在這個例子中:
echo
元件執行個體會將fuchsia.Echo
通訊協定做為其宣告的功能之一提供。echo_tool
元件執行個體需要使用fuchsia.Echo
通訊協定能力。
每個中繼元件都會合作,明確地將 fuchsia.Echo
從 echo
重新導向至 echo_tool
:
echo
公開fuchsia.Echo
自self
,讓通訊協定可供其父項services
查看。services
會將fuchsia.Echo
從子項echo
公開至父項shell
。shell
提供fuchsia.Echo
從其子項services
傳送至另一個子項tools
。tools
提供fuchsia.Echo
,從parent
傳遞至其子項echo_tool
。
元件架構會授予 echo_tool
使用 fuchsia.Echo
的要求,因為找到提供該通訊協定能力的元件有效路徑。
如要進一步瞭解元件如何在執行階段連線至功能,請參閱「通訊協定開啟的生命週期」。