[MEF插件式开发] 一个简单的例子

您所在的位置:网站首页 java插件式开发 [MEF插件式开发] 一个简单的例子

[MEF插件式开发] 一个简单的例子

#[MEF插件式开发] 一个简单的例子| 来源: 网络整理| 查看: 265

偶然在博客园中了解到这种技术,顺便学习了几天。以下是搜索到一些比较好的博文供参考:MEF核心笔记《MEF程序设计指南》博文汇总先上效果图一、新建解决方案开始新建一个解决方案Mef,再添加一 大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说[MEF插件式开发] 一个简单的例子「建议收藏」,希望能够帮助大家进步!!!

偶然在博客园中了解到这种技术,顺便学习了几天。

以下是搜索到一些比较好的博文供参考:

MEF核心笔记

《MEF程序设计指南》博文汇总

 

先上效果图

[MEF插件式开发] 一个简单的例子「建议收藏」

[MEF插件式开发] 一个简单的例子「建议收藏」

[MEF插件式开发] 一个简单的例子「建议收藏」

[MEF插件式开发] 一个简单的例子「建议收藏」

一、新建解决方案

开始新建一个解决方案Mef,再添加一个winform项目为:MefDemo

如图:

[MEF插件式开发] 一个简单的例子「建议收藏」

 

打开Form1窗口,拉入MenuStrip菜单控件,把name改名为"ms",菜单控件什么菜单都不加,如下图:

 

 [MEF插件式开发] 一个简单的例子「建议收藏」

 

接着双击窗口写如下代码:

private void Form1_Load(object sender, EventArgs e) { ToolStripMenuItem item = new ToolStripMenuItem("插件"); ms.Items.Add(item); foreach (IPlugin plugin in plugins) { ToolStripMenuItem subItem = new ToolStripMenuItem(plugin.Text); subItem.Click += (s, arg) => { plugin.Do(); }; item.DropDownItems.Add(subItem); } }

只听到从山间传来架构君的声音: 永丰西角荒园里,尽日无人属阿谁?。有谁来对上联或下联?

  

在继续写一个初始化插件代码:

此代码由Java架构师必看网-架构君整理private CompositionContainer _container; private void Init() { //设置目录,让引擎能自动去发现新的扩展 var catalog = new AggregateCatalog(); catalog.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory+"plugin\\")); //创建一个容器,相当于是生产车间 _container = new CompositionContainer(catalog); //调用车间的ComposeParts把各个部件组合到一起 try { this._container.ComposeParts(this);//这里只需要传入当前应用程序实例就可以了,其它部分会自动发现并组装 } catch (CompositionException compositionException) { Console.WriteLine(compositionException.ToString()); } }

  

Form1构造函数加入Init方法,程序刚启动时会从运行目录下plugin目录搜索所有dll文件并加载,plugin就是插件目录,所有插件都放到这个目录下

public Form1() { InitializeComponent(); Init(); }

  

二、新建接口类库PluginInterface

现在来创建一个接口项目(PluginInterface),它就像数据线或电源线一样,一端连接终端(手机、电脑),一端插到插座(电脑USB接口、插排),完全可以相像一下,手机在电脑充电的情形(它就需要一条数据线,一端连手机,一端连电脑)。

再新建一个接口IPlugin

此代码由Java架构师必看网-架构君整理public interface IPlugin { string Text { get; } //插件名称 void Do(); //动作 }

  

现在回到主程序,打开Form1窗口,写上如下代码:

需要引用System.ComponentModel.Composition

[ImportMany] public IEnumerable plugins;

  [MEF插件式开发] 一个简单的例子「建议收藏」

 

三、新建插件类库

现在可以来开发一个插件,为了方便,我在同一解决方案下创建,创建了一个Plugin1类库

再类库下新建一个类MyPlugin并实现IPlugin,有一点要注意,需要把MyPlugin命名空间改成和主程序一样

namespace MefDemo { [Export(typeof(IPlugin))] public class MyPlugin:IPlugin { public string Text { get { return "插件1"; } } public void Do() { MessageBox.Show(Text); } } }

  

同样的方法再创建2个插件类库,分别是Plugin2、Plugin3(winform)

插件类库编译后,复制dll到主程序plugin目录下

[MEF插件式开发] 一个简单的例子「建议收藏」

 

Demo下载

 

猜您喜欢: 第六章 前端开发——Vue框架「建议收藏」 微服务的4个设计原则和19个解决方案「建议收藏」 c++实现直接插入排序「建议收藏」


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3