CAB学习():使用SCSF创建shell的过程

        在Composite UI Application Block application模型中最典型应用中是采用FormShellApplication, 我们可以利用FormShellApplication 建立系统应用的主界面,也就是我们的主shell用于加载系统模块及服务。我们可以通过创建基于 FormShellApplication 的类作为系统启动的类,利用FormShellApplication 自生的Run 方法来完成系统加载。这个Run 方法在运行时会完成系统所有的初始化任务,包括系统创建WorkItem, 加载系统服务,加载配置的启动模块。

       首先看看FormShellApplication的定义

        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方法进行重载。


原文地址:https://www.cnblogs.com/oldkingsir/p/2365639.html