什么是Bootstrapper(引導程序)
bootstrapper負責初始化使用Prism類庫搭建的應用程序
使用bootstrapper,你可以更方便的控制Prism類庫組件與你的應用程序之間的關系
Prism類庫包含一個默認的抽象基類Bootstrapper
這個類型可以與任何容器一起使用
這個類型中的大多數方法都是虛方法
你可以在你的bootsrapper實現中重寫這些方法
引導程序執行的基本步驟如下:
Prism類庫提供了一些派生自Bootstrapper類的基類
使用這些基類可以完成絕大多數應用程序
繼承實現bootsrapper,
你需要做的工作只是創建和初始化框架界面
依賴注入
使用Prism類庫搭建的應用程序需要使用依賴注入容器
Prism支持Unity和MEF依賴注入容器
並且允許使用其他的依賴注入容器
引導程序的部分工作就是裝配這個容器
並為容器注冊類型
Prism類庫包含UnityBootstrapper和MefBootstrapper類
這兩個類實現了使用Unity或MEF所必須的功能
除了在前面的插圖中展示的步驟
這兩個類型還添加了針對各自容器的特殊步驟
創建框架
一般創建WPF應用程序,
APP.XAML中會指定一個啟動畫面的URI
在Silverlight應用程序中
APP.XAML的后端代碼中指定了系統的RootVisual屬性
使用Prism類庫創建應用程序
bootstrapper負責創建框架畫面
這主要是因為框架畫面依賴於服務
這些服務類似與區域主管
這些服務在框架畫面顯示之前被注冊
關鍵決定
當你決定使用Prism類庫
還需要做出一些額外的決定:
必須決定是使用MEF、Unity還是其他的依賴注入容器
這決定你應該選擇哪個bootstrapper類型
還是需要為你自己的依賴注入容器創建一個新的bootstrapper類型
你應該考慮你系統中的特殊服務單元,
這些需要注冊到依賴注入容器內
判斷是否系統內部集成的日志服務足夠你使用了,
如果不夠你要自己創建你自己的日志服務
決定系統如何發現模塊
使用目錄查找、配置文件、或者xaml來加載模塊
(模塊必須由明確的特性代碼標記)
關鍵場景
指定有序的啟動環節
對你創建Prism應用程序來說非常有用
這一小節主要描述怎樣創建一個bootstrapper(引導程序)、
並定制這個引導程序以啟動自己的框架畫面、
配置依賴注入容器、
注冊系統級別的服務、
怎樣加載和初始化模塊
為你的應用程序創建Bootstrapper
無論你是選擇使用Unity還是MEF作為你的依賴注入容器
為你的應用程序創建一個簡單的bootstrapper
都是非常容易的
你可以創建一個派生自MefBootstrapper或者UnityBootstrapper的類
然后重寫CreateShell方法
有時候你還需要為了特殊的業務需求而重寫InitializeShell方法
實現CreateShell方法
CreateShell方法允許開發人員指定Prism應用程序的top-level(頂層)窗口
Shell通常是指主窗口或注頁面
在這個方法的具體實現中返回一個Shell的實例
在Prism應用程序中
你可以創建一個Shell的實例
也可以從依賴注入容器中取出shell的對象
選擇哪種辦法,就看你的需求了。
使用ServiceLocator從依賴注入容器中取出
shell對象的示例代碼如下:
你會經常使用ServiceLocator(而不是特殊的依賴注入容器)來解析一些類型的實例
ServiceLocator實現了調用依賴注入容器的邏輯
這樣主要是為了應對依賴注入容器代碼不容易控制的特性
你也可以通過直接引用類庫來使用依賴注入容器
實現InitializeShell方法
當你創建了一個框架畫面(shell)
你需要執行初始化的幾個步驟來確定你的框架畫面可以被正常顯示
開發WPF和開發Silverlight應用程序
InitializeShell方法的實現方式也會不同
對於Silverlight應用程序來說
你需要把框架畫面設置成系統的visual root
代碼如下:
對於WPF應用程序
你必須先實例化shell類型
然后把這個實例設置成系統的主窗口
代碼如下:
基類的InitializeShell方法什么也沒有做,是個空方法
不調用基類的InitializeShell方法也沒有關系。