创建解决方案时,自动生动的框架代码
Infrastructure.Interface : 这个工程包括了event topic names, UI extension site names, command names, and workspace names,这些都是Infrastructure.Module模块的公共接口.
Infrastructure.Library : 这个工程包括了智能客户端程序的常用组件,举例来说,它包含一个从Web service中检索配置文件目录的服务.
Infrastructure.Module : 这个工程包含的元素是可以跨工程在整个智能客户端解决方案中共享的。
Shell : 该项目是一个典型的复合UI界面程序块的应用基础。它包含启动窗体和根WorkItem。
Infrastructure.Interface 详述
本项目为 Infrastructure.Module 的接口和只包含已经被暴露于其他模块的应用的 元素。
它由service interfaces(服务接口), constant definitions(常量定义), business entities(业务实体类,只在模块之类传递的)组成,除此之外,它还包含其它一些元素,比如一些通用基类.
Constant Definitions(常量定义)
Commands, event topics, UI extension sites, workspaces 它们都用一个唯一的字符串来标识。这些唯一的字符串被定义为每个这些元素类型的常量,并分成不同的组,放在Constant文件夹下面.
CommandNames Class(命令名类)
复合UI界面程序块使用命令来轻易地分配相同的可执行代码到多个用户界面元素。例如,你有一个工具栏按钮和一个菜单项,你可以相同的命令让它们执行相同的代码。每个命令都有一个唯一的字符串标识符。
下面的代码是下个简单的CommandNames类的声明
public class CommandNames { public const string FindCustomer = "FindCustomer"; public const string EnqueueVisitor = "EnqueueVisitor"; public const string ServiceCustomer = "ServiceCustomer"; }
EventTopicNames Class (事件主题名称类)
复合UI界面程序块包括一个事件代理系统,可让你在WorkItem中发布事件,允许组件之间的通信。这个事件的名称是用一个字符串来标识。该eventtopicnames类包含的是全局应用程序事件主题的标识符的定义。
下面的是解决方案创建时初步实现的EventTopicNames类的代码,它定义了一个事件的主题名称“statusupdate”,它是一个当shell的状态面板更新时会触发的一个事件.
public class EventTopicNames { /// <summary> /// Event raised to tell the shell to update the status panel. /// </summary> public const string StatusUpdate = "StatusUpdate"; }
UIExtensionSiteNames Class
public class UIExtensionSiteNames { /// <summary> /// The extension site for the main menu. /// </summary> public const string MainMenu = "MainMenu"; /// <summary> /// The extension site for the main toolbar. /// </summary> public const string MainToolbar = "MainToolbar"; /// <summary> /// The extension site for the main status bar. /// </summary> public const string MainStatus = "MainStatus"; }
WorkspaceNames Class
工作区组件封装的是显示控制和SmartParts的一个特定的可视化的方式。 每个Workspace由一个唯一字符串定义。 WorkspaceNames类中定义了所有Workspace在全局应用程序中的标示符。public class WorkspaceNames { public const string LayoutWorkspace = "LayoutWorkspace"; public const string ModalWindows = "ModalWindows"; public const string LeftWorkspace = "LeftWorkspace"; public const string RightWorkspace = "RightWorkspace"; }
Business Entities(业务实体类)
该BusinessEntities 文件夹包含了一些业务实体类。这些类定义了不同的业务对象的实例,并在智能客户端程序不同模块间共享。
拿一个业务实体类举例来说,BusinessEntities文件夹下的Infrastructure.Interface工程,银行分行客户参考实现的接口方案。
Service Interfaces (服务接口)
Service文件夹包含公共服务的接口(在其它工程中的WorkItem可使用的服务)
EventArgs Class (事件参数类)
不同的事件句柄可以使用不同的参数类型。EventArgs类是一个类,允许你指定一个用于事件发布和订阅类型安全的描述。
public class EventArgs<T> : System.EventArgs { private T _data; public EventArgs(T data) { _data = data; } public T Data { get { return _data; } } }
把业务逻辑和WorkItem代码分离的类
/// <summary> /// Controller used by <see cref="ControlledWorkItem{TController}"/>. /// </summary> public interface IWorkItemController { /// <summary> /// Called when the controller is ready to run. /// </summary> void Run(); }
/// <summary> /// Represents a WorkItem that uses a WorkItem controller to perform its /// business logic. /// </summary> /// <typeparam name="TController"></typeparam> public sealed class ControlledWorkItem<TController> : WorkItem { private TController _controller; /// <summary> /// Gets the controller. /// </summary> public TController Controller { get { return _controller; } } /// <summary> /// See <see cref="M:Microsoft.Practices.ObjectBuilder.IBuilderAware.OnBuiltUp(System.String)"/> for more information. /// </summary> public override void OnBuiltUp(string id) { base.OnBuiltUp(id); _controller = Items.AddNew<TController>(); } }
Presenter Base Class
这个类包含的代码会在你使用MVP模式中每一个的Presenter中出现。它包括一个基本的视图和相关的WorkItem,此外它还提供虚拟工作方法的控制视图。
ActionAttribute
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)] public class ActionAttribute : Attribute { private string _actionName; public ActionAttribute(string actionName) { _actionName = actionName; } public string ActionName { get { return _actionName; } set { _actionName = value; } } }