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、是否能开发插件、如何开发插件是由写主程序的人来决定的。