CAB學習(-):使用SCSF創建shell的過程

       在Composite UI Application Block application模型中最典型應用中是採用FormShellApplication, 我們可以利用FormShellApplication 建立系統應用的主界面,也就是我們的主shell用於加載系統模塊及服務。我們可以通過創建基於 FormShellApplication 的類作爲系統啓動的類,利用FormShellApplication 自生的Run 方法來完成系統加載。這個Run 方法在運行時會完成系統所有的初始化任務,包括系統創建WorkItem, 加載系統服務,加載配置的啓動模塊。

    public abstract class FormShellApplication<TWorkItem, TShell> : WindowsFormsApplication<TWorkItem, TShell>
        where TWorkItem : Microsoft.Practices.CompositeUI.WorkItem, new()
        where TShell : System.Windows.Forms.Form 


由此可以看出FormShellApplication是一個抽象的泛型類,下面我們來看看該類所需的兩個參數。

        TWorkItem :是要指定的 rootworkitem,是通過系統在初始化中傳入的實體類型,WorkItem中支持命令和事件,同時 WorkItem可以嵌套,通過 Parent進行關聯,通過 RootWorkItem可以獲取頂層 WorkItem,開發人員可以利用這一特性來組織自己業務用例和劃分業務用例的粒度。 WorkItem中使用 State來共享信息,在同一個 WorkItem容器中的對象可以共享訪問這個信息。 WorkItem容器中的對象對其中的 Service都可以訪問。

WorkItem通過調用 Run方法進行啓動,調用這個方法的時候會調用他的 OnRunStarted 方法,一般我們自定義了一個 WorkItem,如果有需要可以重載其 OnRunStarted方法來自定義其啓動邏輯。 Run方法調用後會觸發 RunStarted事件。

一般我們會藉助 WorkItem提供的特性,採用 MVC的模式進行業務用例的封裝。使用 SmartPart作爲用戶交互的 UI顯示部分( View),創建一個控制類來進行業務邏輯的封裝( Controller),然後將業務數據存放於內存實體中( Model)。用戶界面和內存實體採用綁定的方式關聯起來。

通常情況下我們可以從WorkItem 中繼承自定義一個自己的MainWorkItem 用於完成主窗體的加載所需要包含的業務邏輯,服務等等,當然我們也可以使使用CAB中自帶的WorkItem ,有關WorkItem的創建我會在後續章節中詳細介紹。

TShell: 我們可以通過約束知道該類必須是一個window的Form 類,通常情況下它將作爲我們展示的主界面,我們可以設計該窗體,同時也可以在系統啓動時由系統加載訂製我們主窗體的各種 UIElements

通過對FormShellApplication 的簡單瞭解後,我們來看看如何在系統啓動時如何加載自定義的shell 模型。前面已經提到我們系統加載是通過執行FormShellApplication的Run方法, 該方法實際是在執行CabApplication類中的Run方法, CabApplication 會完成對一些可視化的組件包括菜單、工具條以及 SmartParts 的加載,通常情況下我們可以在FormShellApplication 中對AfterShellCreated 進行重載已完成我們自定義的 UIElements 的加載。在AfterShellCreated 執行時會調用 RootWorkItem的 OnRunStarted ,爲此我們需要在我們自定義的WorkItem(如MainWorkItem中)對OnRunStarted方法進行重載。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章