插件应用
来源:互联网 发布:淘宝卖衣服进货渠道 编辑:程序博客网 时间:2024/05/07 02:29
author = "MALONG"
copyright = "GPL"
url = "http://www.CCC.net"
description = "Display AddinTree"
version = "1.0.0">
<Runtime>
<Import assembly="../../bin/ AddinTreeView.dll"/>
</Runtime>
<Extension path = "/Gdesigner/Workbench/MainMenu/Tools">
<MenuItem id = "AddinTreeView"
label = "View AddinTree"
class = "Addins.AddinTreeView.AddinTreeViewCommand"/>
</Extension>
</AddIn>
author = "SimonLiu"
copyright = "GPL"
url = "http://www.ccc.net"
description = "Display AddinTree"
version = "1.0.0">
<Runtime>
<Import assembly="../../bin/Addins.dll"/>
</Runtime>
<Extension path = "/Gdesigner/Workbench/MainMenu/Tools">
<MenuItem id = "ResourceEditor"
label = "Resource Editor"
class = "Addins.ResourceEditor.Command.ResourceEditorCommand"/>
<MenuItem id = "AddinTreeView"
label = "View AddinTree"
class = "Addins.AddinTreeView.AddinTreeViewCommand"/>
</Extension>
</AddIn>
每一个插件都会被挂到 AddInTree(插件树) 中,而具体挂接到这个插件树的哪个位置,则是由插件的 Extension 对象中的 Path 指定的。在addin 配置文件中,对应于 <Extension> 。例如下面这个功能模块的配置
<Class id = ".NET" class = "IGdesigner.Gdesigner.Services.NetAmbience"/>
</Extension>
<Class id = ".NET" class = "IGdesigner.Gdesigner.Services.NetAmbience"/>
</Extension>
再例如这一个定义
<MenuItem id = "Compile"
label = "${res:XML.MainMenu.RunMenu.Compile}"
class = " IGdesigner. Gdesigner.Commands.Compile"/>
<MenuItem id = "CompileAll"
label = "${res:XML.MainMenu.RunMenu.CompileAll}"
class = " IGdesigner. Gdesigner.Commands.CompileAll"/>
<MenuItem id = "CombineBuildGroupSeparator" label = "-" />
.
</Extension>
总结如下,定义一个接口ICommand,声明void DoCommand()方法,新增插件必须实现此接口;单击菜单项或工具栏按钮时需要与主窗体交互,这可以通过在ICommand中定义属性MainForm或在void DoCommand(MainForm frm)中增加方法参数来传递主窗体的引用,这些实现起来倒也简单。接下来的问题是如何通知应用程序新增加了插件呢,答案是使用xml配置文件,怎么组织这个配置文件的结构呢?这个问题其实成了实现插件功能的重点和难点,配置文件中希望说明新增插件的dll位置、类名、插接入主程序的菜单还是工具栏项、插接位置。
我们可以运用Command模式,将菜单项相应的操作抽象出来,定义一个命令接口ICommand,此接口仅具有Run方法,可以作为任何命令的基接口。但是由于菜单还具有一些其它的特性,如是否可见,是否可用,文本,需要执行此菜单项的宿主,所以再定义了一个IMenuCommand接口继承此接口,加入了一些新的特性,并定义了一个实现IMenuCommand接
CustomCommandBarItem:继承于CommandBar组件的CommandBarButton类,类似于菜单项或工具项,实现了IStatusUpdate接口,以根据IMenuCommand接口的Visible、Enabled属性的改变而相应地更新其Enabled,Visible属性;
当我们需要创建命令时,只需写相关的类继承于MenuCommand
可以将权限控制写在IMenuCommand中的Enabled中,在执行Run方法之前先检测Enabled,如果Enabled为false则禁止执行,我先前写过一个权限框架,通过Attribute及Reflect技术来实现权限的自动控制。
- 插件应用
- 插件式应用框架
- jQuery插件应用实例
- jquery 插件应用网站
- Maven-Hibernate3插件应用
- web应用插件化
- firefox应用 插件
- dataTable 插件的应用
- jsTree插件的应用
- ckeditor4.2.2插件应用
- Jquery简单插件应用
- VIM插件project应用
- jQuery 插件autocomplete 应用
- 【Qt】制作应用插件
- Maven插件应用-assembly
- jQuery插件应用
- jQuery 插件autocomplete 应用
- swiper 插件应用!
- undefined symbol:_zend_list_delete问题
- 可利用交换机漏洞的五种攻击手段
- SELECT查询自动增加序号
- 什么是网关
- MySQL远程访问时,非常慢
- 插件应用
- 火车模块
- Drupal theme-2 安装主题
- CSDN网摘FireFox 3.0 RC1版
- 防火墙导致MySQL无法访问的问题解决案例
- 步入J2EE架构和过程
- Visual C#中的数据绑定
- Drupal theme-3 理解模板文件 第八章
- 步入J2EE架构和过程2