Prism 6
- Introduction介紹
- Initializing初始化
- Managing-Dependencies管理依賴
- Modules模塊
- Implementing-MVVM實時MVVM
- Advanced-MVVM先進MVVM
- Composing-the-UI組合UI
- Navigation導航
- Communication通信
- Deploying部署
- Appendix-A-Glossary附錄詞彙
- Appendix-B-Patterns附錄模式
- Appendix-C-Prism-Library附錄Prism庫
- Appendix-D-Extending-Prism附錄擴展Prism
- Appendix-E-Click-Once
簡介
Prism須要.Framework4.5,包含MVVM(Model-View-ViewModel)模式,Navigation,和MEF(Managed Extensibility Framework)html
前期準備
學習Prism須要一些WPF的概念,須要瞭解和熟悉git
- XAML(Extensible Application Markup Language)。在WPF應用程序中以聲明方式定義和初始化用戶界面的語言。
- 數據綁定(Binding)。這就是UI元素如何鏈接到WPF中的組件和數據。
- 資源(Resources)。這些是在WPF中建立和管理樣式,數據模板和控件模板的方式。
- 命令(Commands)。這些是用戶手勢和輸入鏈接到控件的方式。
- 用戶控件(User Controls)。這些是提供自定義行爲或自定義外觀的組件。
- 依賴屬性(Dependency properties)。這些是公共語言運行時(CLR)屬性系統的擴展,用於啓用屬性設置和監視,以支持數據綁定,路由命令和事件。
- 行爲(Behaviors)。行爲是封裝交互功能的對象,能夠輕鬆應用於用戶界面中的控件。
關鍵概念
Prism提供了您可能不熟悉的功能和設計模式,特別是若是您是設計模式和複合應用程序開發的新手。本節簡要概述了Prism背後的主要概念,並定義了您將在整個文檔和代碼中使用的一些術語。github
- 模塊(Modules)。模塊是能夠獨立開發,測試和(可選)部署的功能包。在許多狀況下,模塊由不一樣的團隊開發和維護。典型的Prism應用程序由多個模塊構建。模塊可用於表示特定的業務相關功能(例如,配置文件管理),並封裝實現該功能所需的全部視圖,服務和數據模型。模塊還可用於封裝可在多個應用程序中重用的常見應用程序基礎結構或服務(例如,日誌記錄和異常管理服務)。
- 模塊目錄(Module catalog)。在複合應用程序中,必須由主機應用程序在運行時發現和加載模塊。在Prism中,模塊目錄用於指定要加載哪些模塊,什麼時候加載以及按什麼順序加載。模塊目錄由ModuleManager和ModuleLoader組件使用,若是模塊是遠程的,則負責下載模塊,將模塊的程序集加載到應用程序域中,以及初始化模塊。Prism容許以不一樣方式指定模塊目錄,包括以編程方式使用代碼,以聲明方式使用XAML或使用配置文件。若是須要,您還能夠實現自定義模塊目錄。
- 殼(Shell)。shell是加載模塊的宿主應用程序。shell定義了應用程序的總體佈局和結構,但它一般不知道它將託管的確切模塊。它一般實現常見的應用程序服務和基礎結構,但大多數應用程序的功能和內容都是在模塊中實現的。shell還提供頂級窗口或可視元素,而後將託管由加載的模塊提供的不一樣UI組件。
- 視圖(Views)。視圖是UI控件,用於封裝應用程序的特定功能或功能區域的UI。視圖與MVVM模式結合使用,MVVM模式用於在UI與應用程序的表示邏輯和數據之間提供關注點的清晰分離。視圖用於封裝UI並定義用戶交互行爲,從而容許獨立於底層應用程序功能更新或替換視圖。視圖使用數據綁定與視圖模型類交互。
- 視圖模型(View models)。視圖模型是封裝應用程序的表示邏輯和狀態的類。它們是MVVM模式的一部分。View模型封裝了應用程序的大部分功能。視圖模型定義屬性,命令和事件,視圖中的控件能夠對其進行數據綁定。
- 模型(Models)。模型類封裝了應用程序數據和業務邏輯。它們用做MVVM模式的一部分。模型封裝了數據以及任何相關的驗證和業務規則,以確保數據的一致性和完整性。
- 命令(Commands)。命令用於封裝應用程序功能,容許獨立於應用程序的UI定義和測試它們。它們能夠在視圖模型中定義爲命令對象或命令方法。Prism提供DelegateCommand類和CompositeCommand類。後者用於表示一塊兒調用的命令集合。
- 地區(Regions)。區域是在應用程序的UI(在shell或視圖中)中定義的邏輯佔位符,其中顯示視圖。區域容許更新應用程序UI的佈局,而無需更改應用程序邏輯。許多經常使用控件可用做區域,容許視圖自動顯示在控件中,例如ContentControl,ItemsControl,ListBox或TabControl。能夠以編程方式或自動方式在區域內顯示視圖。Prism還爲實施區域導航提供支持。區域能夠經過RegionManager組件由其餘組件定位,該組件使用RegionAdapter和RegionBehavior組件,以協調特定區域內的視圖顯示。
- 導航(Navigation)。導航定義爲應用程序經過其與應用程序或內部應用程序狀態更改進行交互而更改其UI的過程。Prism支持兩種導航樣式:基於狀態的導航,其中現有視圖的狀態被更新以實現簡單的導航場景;以及視圖切換導航,其中建立新視圖並在應用程序的UI內替換舊視圖。視圖切換導航使用基於統一資源標識符(URI)的導航機制與Prism區域相結合,以容許實現靈活的導航方案。
- 事件聚合(EventAggregator)。複合應用程序中的組件一般須要以鬆散耦合的方式與應用程序中的其餘組件和服務進行通訊。爲了支持這一點,Prism提供了EventAggregator組件,它實現了pub-sub事件機制,從而容許組件發佈事件和其餘組件來訂閱這些事件,而不須要引用另外一個事件。所述EventAggregator常常被用來容許在不一樣的模塊中定義的部件彼此通訊。
- 依賴注入容器(Dependency injection container)。整個Prism使用依賴注入(DI)模式來容許管理組件之間的依賴關係。依賴注入容許在運行時實現組件依賴性,而且它支持可擴展性和可測試性。Prism旨在與Unity或MEF一塊兒使用,或經過ServiceLocator與任何其餘依賴注入容器一塊兒使用。
- 服務(Services)。服務是封裝非UI相關功能的組件,例如日誌記錄,異常管理和數據訪問。服務能夠由應用程序定義,也能夠在模塊內定義。服務一般在依賴注入容器中註冊,以便它們能夠根據須要定位或構造,並由依賴於它們的其餘組件使用。
- 控制器(Controllers)。控制器是用於協調要在應用程序UI中的區域中顯示的視圖的構造和初始化的類。控制器封裝了表示要顯示哪些視圖的表示邏輯。控制器將使用Prism的視圖切換導航機制,該機制提供可擴展的基於URI的導航機制,以協調區域內視圖的構造和放置。Application Controller模式定義了映射到此職責的抽象。
- 引導程序(Bootstrapper)。該引導程序組件應用程序使用來初始化各個棱鏡組件和服務。它用於初始化依賴注入容器,以便向其註冊任何應用程序級組件和服務。它還用於配置和初始化模塊目錄以及shell的視圖和視圖模型或演示者。
Prism的設計使您能夠單獨使用任何前述功能和設計模式,也能夠根據您的要求和應用場景一塊兒使用。您能夠以任意組合使用MVVM模式,模塊化,區域,命令或事件,而無需採用全部這些模式。固然,若是您想充分利用分離關注點和鬆散耦合提供的好處,您一般會將Prism的許多功能和設計模式相互結合使用。下圖顯示了典型的Prism應用程序體系結構,並展現了Prism的全部各類功能如何在多模塊複合應用程序中協同工做。shell
使用Prism庫的典型複合應用程序架構編程
大多數Prism應用程序由一個shell應用程序組成,該應用程序定義用於顯示頂級視圖的區域和可由加載的模塊訪問的共享服務。shell定義了一個合適的目錄,以指定在啓動時加載哪些模塊(若是適用)。還定義了依賴注入容器,其容許在運行時實現組件依賴性。應用程序啓動時,Bootstrapper在容器中註冊共享服務和組件。設計模式
各個模塊封裝了整個應用程序功能的一部分,並使用分離的表示模式(如MVVM)定義視圖,視圖模型,模型和服務組件。加載模塊時,模塊中定義的視圖將顯示在shell定義的區域內。初始化完成後,用戶而後使用基於狀態或視圖切換的導航在應用程序內導航,以協調應用程序區域內的新視圖的可視更新或顯示。架構