【翻譯】Prism4:初始化Prism應用程序(上)


什么是Bootstrapper(引導程序)

bootstrapper負責初始化使用Prism類庫搭建的應用程序

使用bootstrapper,你可以更方便的控制Prism類庫組件與你的應用程序之間的關系

 

Prism類庫包含一個默認的抽象基類Bootstrapper

這個類型可以與任何容器一起使用

這個類型中的大多數方法都是虛方法

你可以在你的bootsrapper實現中重寫這些方法

 

引導程序執行的基本步驟如下:

image

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對象的示例代碼如下:

protected override DependencyObject CreateShell()
{
    return ServiceLocator.Current.GetInstance<Shell>();
}

你會經常使用ServiceLocator(而不是特殊的依賴注入容器)來解析一些類型的實例

ServiceLocator實現了調用依賴注入容器的邏輯

這樣主要是為了應對依賴注入容器代碼不容易控制的特性

你也可以通過直接引用類庫來使用依賴注入容器

實現InitializeShell方法

當你創建了一個框架畫面(shell)

你需要執行初始化的幾個步驟來確定你的框架畫面可以被正常顯示

開發WPF和開發Silverlight應用程序

InitializeShell方法的實現方式也會不同

對於Silverlight應用程序來說

你需要把框架畫面設置成系統的visual root

代碼如下:

protected override void InitializeShell()
{
    Application.Current.RootVisual = Shell;
}

對於WPF應用程序

你必須先實例化shell類型

然后把這個實例設置成系統的主窗口

代碼如下:

protected override void InitializeShell()
{
    Application.Current.MainWindow = Shell;
    Application.Current.MainWindow.Show();
}

基類的InitializeShell方法什么也沒有做,是個空方法

不調用基類的InitializeShell方法也沒有關系。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM