插件式程序开发.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
插件式程序开发 * 目录 MAF 托管插件框架 1 MEF 拓展可扩展性框架 2 提起插件式 3 * MAF 托管插件框架 * (不适用) MAF 托管插件框架 MAF是一个复杂的框架,并且即使是对于简单的应用程序,设置插件管道也很繁琐。它比MEF复杂,需要配置很多元素。但它也有些优点:1.宿主程序和插件程序可以进行隔离,以此降低运行插件所带来的风险;2。MAF的设计是基于7个程序集组成的管道,这些管道部分可以单独更换。 * 宿主 宿主视图 宿主 适配器 协定 插件 适配器 插件视图 插件 MEF 拓展可扩展性框架 * (适用) MEF 拓展可扩展性框架 MEF(Managed Extensibility Framework),是微软推出的一款用于搭建可扩展应用程序的框架,起初是独立于 .Net 发布的,后来集成到了 .Net 4.0 中。使用该框架可以非常轻松地扩展一个已发布的应用程序的功能,连 Visual Studio IDE 中的代码编辑器窗口也采用了MEF的思想,因此大大方便了开发人员对编辑器的扩展。 MEF 可用在任何使用 .NET Framework 的地方。可以在客户端应用程序中使用 MEF(无论应用程序使用的是 Windows 窗体、WPF,还是任何其他技术),也可以在使用 ASP.NET 的服务器应用程序中使用 MEF。 * MEF 的关键概念 导入,这里建议作为一个名词来理解,即一个接受者,它可以接受外来的东西。就好比是下图中的盒子,它可以接受其它积木。 * Import MEF 的关键概念 导出,同样建议以一个名词来理解,即一个第三方的产物。它就像上图中不同颜色的积木,这些积木不属于这个盒子,但是能被放入盒子中,来丰富盒子的功能。 * Export MEF 的关键概念 协议。要想使盒子能接受积木(比如,圆柱体只能放入圆形的接口中),那这些积木必须符合一定的形状。而这些形状就相当于是应用程序和第三方扩展之间的一个协议。 * Contract MEF 的关键概念 组合(动词),即将多个符合协议要求的部件组合在一起,构成一个功能丰富的应用程序。就好比是将不同形状的积木,按照接口的形状组合在一起。 * Compose 它是如何工作的? MEF 会动态查找用户所指定的目录,如果发现该目录中的程序集满足协议要求,就会启动自身的组合引擎,然后根据不同的协议约定把这些扩展导入到应用程序内部。 * Plugin dir 用 MEF 实现一个最简单的可扩展应用程序 * 这个和普通定义接口没什么两样。 协议 有了协议之后,就需要给应用程序安一个接受者。让这个应用程序可以通过接受者来获取第三方扩展。MEF 提供了 [Import] 和 [ImportMany] 两种 attribute。 区别就是 Import 只能接受符合协议的一个扩展,而 ImportMany 可以接受多个,并把多个扩展放入集合中。 安装接受者 这个产物的生产过程其实就是实现接口的过程,唯一的区别是我们要为这个实现打上个标签,从而告诉我们的组合引擎这个东西是给接受者的。MEF 提供了 Export 来暗示这是一个可以提供给接受者的产物。 符合协议的产物 注:添加 System.ComponentModel.Composition 程序集到项目中。 用 MEF 实现一个最简单的可扩展应用程序 * 代码会自动去发现扩展,然后加入到应用程序中来。要做的只是把新扩展的程序集放入 执行目录下的plugin 目录中就可以了 发动引擎 示例代码 namespace Core { public interface IPlugin { string Text { get; } void Do(); } } * 协议接口IPlugin 示例代码 [ImportMany] public IEnumerableIPlugin plugins; private void Form1_Load(object sender, EventArgs e){ foreach (IPlugin plugin in plugins){ Button btn = new Button { Text=plugin.Text}; btn.Click += (s, arg) = { plugin.Do();}; btn.Width = 100; this.panel1.Controls.Add(btn); } } * 安装接收器 示例代码 namespa

文档评论(0)

liudao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档