Composite UI Application Block(CAB)(2)CAB中涉及的相关概念和术语
序言
CAB 主要有三个工程组成:CompositeUI、CompositeUI.WinForms和ObjectBuilder
WorkItem
是一个运行时容器,该容器中包含完成一个用例所需要的各种各样的组件,组件可以是可视化的也可以是非可视化的,比如:SmartPart,Service,Commonds等等。
SmartPart
一个展现数据的视图,比如控件,Windows 窗体或是一个向导页。
SmartPartInfo
存放SmartPart的相关信息的类,以便被workspace所使用,比如可以在Smartpartinfo中设置SmartPart的显示标题。
Workspace
WorkSpace:作为一个容器,它可以统一的添加和显示视图。CAB中提供了一组控件作为视图的容器,包括DeckWorkSpace,MDIWorkSpace,TabWorkSpace,WindowWorkSpace,ZoneWorkSpace。
它们的作用有点类似普通Windows 控件Panel,MDI窗口,TAB控件,Window窗体。在程序中根据名称可以通过WorkItem的WorkSpace集合索引到它们。
Smart Part: 也可以被称作View,实际上是一个个自定义的控件。
封装了控件和SmartParts的某种可视化的布局的组件,比如以Tab方式显示页面。
Workspace(容器Frame)和SmartParts(控制容器)
1.WindowWorkSpace
该WorkSpace能将你需要在其中显示的用户控件在一个WinForm中显示出来,我们可以通过和该WorkSpace对应的WindowSmartPartInfo来设置用户控件的显示属性,如标题信息,是否是模式窗口等。
![](https://www.cnblogs.com/images/cnblogs_com/mixiaobo/Composite%20UI%20Application%20Block/WinWorkSpace.png)
https://blog.csdn.net/lee576/category_325929.html
Controller
https://blog.csdn.net/lee576/article/details/6627614
public abstract class CabShellApplication<TWorkItem, TShell> : CabApplication<TWorkItem> where TWorkItem : WorkItem, new() { protected CabShellApplication(); protected TShell Shell { get; } protected virtual void AfterShellCreated(); protected virtual void BeforeShellCreated(); protected sealed override void OnRootWorkItemInitialized(); }
ParentWorkItem.Commands[commandName].RemoveInvoker(btn, "Click");
ParentWorkItem.Commands[commandName].AddInvoker(btn, "Click");
ParentWorkItem.Commands[commandName].Execute();
ToolStripMenuItem item = CreateMenuItemForMapping(mapping);
UIExtensionSites[mapping.Site].Add(item);
Commands[mapping.CommandName].AddInvoker(item, "Click");
Command helloCommand = RootWorkItem.Commands["HelloCommand"];
ToolStripItem toolStripItem = this.Shell.mainToolStrip.Items["toolStripButton1"];
helloCommand.AddInvoker(toolStripItem, "Click");
[CommandHandler("HelloCommand")]
public void HelloHandler(object sender, EventArgs e)
{
MessageBox.Show("Hello world using CAB commands");
}
UIExtensionSites
同样,UIExtensionSites也是一个集合,用来管理UIExtensionSite,我们可以通过下列方法将一个UIExtensionSite添加到WorkItem中:
WorkItem.UIExtensionSites.RegisteSite(UIExtensionSiteNames.XXXX, XXXXXXX;
Commands
Commands集合用来管理Command,
WorkItem.Commands[Constants.CommandNames.TestButtonClick].AddInvoker(element, "Click");
观察者模式
https://richnewman.wordpress.com/category/composite-application-block/
Global
WorkItem
Descendants
使用UI元素扩展流程:
1.注册适配器工厂:
rootWorkItem.Services.AddNew<UIElementAdapterFactoryCatalog, IUIElementAdapterFactoryCatalog>();
2.注册UI扩展站点:
RootWorkItem.UIExtensionSites.RegisterSite(UIExtensionConstants.MAINMENU, Shell.MainMenuStrip)
3.在站点上添加元素:
UIExtensionSites[UIExtensionConstants.FILE].Add(queueItem);
Thread.CurrentPrincipal.Identity.Name;
Shell application (CD)
Shell (CD)
Workspace (CD)
Service (CD)
Module (CD AD)
ProfileCatalog (CD)
ModuleLoader (CAB)
ModuleInit (CD AD)
UIExtensionSite (CD)
WorkItem (CD AD)
Command (CAB)
EventPublication
EventSubscription
Model/View/Controller/Presenter
SmartPart
ObjectBuilder
资料
Composite UI Application Block (CAB) 详解
Smart Client Software Factory:CAB
https://blog.csdn.net/lee576/category_325929.html
https://www.cnblogs.com/mixiaobo/archive/2008/01.html
https://blog.csdn.net/lee576/article/details/6412358
https://blog.csdn.net/lee576/article/details/6412339
WorkSpace介绍
https://www.cnblogs.com/mixiaobo/archive/2008/01/27/1055021.html
https://richnewman.wordpress.com/category/composite-application-block/