反射(8)——编辑器插件体系

1、如鹏网项目中第三方支付、定时任务就是用的这种技术。

2、插件(Add-In、plugin):按照宿主程序的接口要求开发Assembly,然后让宿主程序加载我们编写的Assembly,这样宿主程序中就有了咱们扩展编写的代码逻辑,这样就相当于不用修改主程序的代码就可以增加新功能。

3、查看Reflector插件体系,添加、移除插件看菜单的变化。

4、Reflector这种插件体系的好处就是不用把菜单项的功能在开发时写好,而是运行时动态加载,这样很容易添加新功能。编写Reflector插件参考http://reflectoraddins.codeplex.com/documentation

5、开发自己的插件体系(代码见附件),在工具菜单下动态增加菜单项,插件放到plugins目录下。程序启动的时候动态加载所有plugins目录下的dll插件动态构造菜单,点击菜单项的时候执行插件中定义的代码。

IPackage 

this.assemblyBrowser = (IAssemblyBrowser) serviceProvider.GetService(typeof(IAssemblyBrowser)); ILanguageManager service = (ILanguageManager) serviceProvider.GetService(typeof(ILanguageManager)); ITranslatorManager manager2 = (ITranslatorManager) serviceProvider.GetService(typeof(ITranslatorManager)); IVisibilityConfiguration configuration1 = (IVisibilityConfiguration) serviceProvider.GetService(typeof(IVisibilityConfiguration)); this.commandBarManager = (ICommandBarManager) serviceProvider.GetService(typeof(ICommandBarManager)); this.separator = this.commandBarManager.CommandBars["Tools"].Items.AddSeparator(); this.button = this.commandBarManager.CommandBars["Tools"].Items.AddButton("&XMI Export", new EventHandler(this.ExportXMIClicked)); this.button.Image = Resources.Logo; this.toolSeparator = this.commandBarManager.CommandBars["ToolBar"].Items.AddSeparator(); this.toolButton = this.commandBarManager.CommandBars["ToolBar"].Items.AddButton("Xmi Export", Resources.Logo, new EventHandler(this.ExportXMIClicked)); this.assemblyBrowser.ActiveItemChanged += new EventHandler(this.AssemblyBrowserActiveItemChanged); this.RedoButtonEnabled(); 

private IAssemblyBrowser assemblyBrowser; private ICommandBarButton button; private ICommandBarManager commandBarManager; private ICommandBarSeparator separator; private ICommandBarButton toolButton; private ICommandBarSeparator toolSeparator; 

6、是否能开发插件、如何开发插件是由写主程序的人来决定的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值