插件式程序开发ppt课件.ppt

插件式程序开发ppt课件.ppt

ID:59470650

大小:947.00 KB

页数:30页

时间:2020-09-14

插件式程序开发ppt课件.ppt_第1页
插件式程序开发ppt课件.ppt_第2页
插件式程序开发ppt课件.ppt_第3页
插件式程序开发ppt课件.ppt_第4页
插件式程序开发ppt课件.ppt_第5页
资源描述:

《插件式程序开发ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、插件式程序开发9/20/2021目录MAF托管插件框架1MEF拓展可扩展性框架2提起插件式39/20/2021MAF托管插件框架9/20/2021(不适用)MAF托管插件框架MAF是一个复杂的框架,并且即使是对于简单的应用程序,设置插件管道也很繁琐。它比MEF复杂,需要配置很多元素。但它也有些优点:1.宿主程序和插件程序可以进行隔离,以此降低运行插件所带来的风险;2。MAF的设计是基于7个程序集组成的管道,这些管道部分可以单独更换。9/20/2021宿主宿主视图宿主适配器协定插件适配器插件视图插件MEF拓展可扩展性框架9/20/2021(适用)MEF拓展可扩展性框架MEF(Mana

2、gedExtensibilityFramework),是微软推出的一款用于搭建可扩展应用程序的框架,起初是独立于.Net发布的,后来集成到了.Net4.0中。使用该框架可以非常轻松地扩展一个已发布的应用程序的功能,连VisualStudioIDE中的代码编辑器窗口也采用了MEF的思想,因此大大方便了开发人员对编辑器的扩展。MEF可用在任何使用.NETFramework的地方。可以在客户端应用程序中使用MEF(无论应用程序使用的是Windows窗体、WPF,还是任何其他技术),也可以在使用ASP.NET的服务器应用程序中使用MEF。9/20/2021MEF的关键概念导入,这里建议作为

3、一个名词来理解,即一个接受者,它可以接受外来的东西。就好比是下图中的盒子,它可以接受其它积木。9/20/2021ImportMEF的关键概念导出,同样建议以一个名词来理解,即一个第三方的产物。它就像上图中不同颜色的积木,这些积木不属于这个盒子,但是能被放入盒子中,来丰富盒子的功能。9/20/2021ExportMEF的关键概念协议。要想使盒子能接受积木(比如,圆柱体只能放入圆形的接口中),那这些积木必须符合一定的形状。而这些形状就相当于是应用程序和第三方扩展之间的一个协议。9/20/2021ContractMEF的关键概念组合(动词),即将多个符合协议要求的部件组合在一起,构成一个

4、功能丰富的应用程序。就好比是将不同形状的积木,按照接口的形状组合在一起。9/20/2021Compose它是如何工作的?MEF会动态查找用户所指定的目录,如果发现该目录中的程序集满足协议要求,就会启动自身的组合引擎,然后根据不同的协议约定把这些扩展导入到应用程序内部。9/20/2021Plugindir用MEF实现一个最简单的可扩展应用程序9/20/2021这个和普通定义接口没什么两样。协议有了协议之后,就需要给应用程序安一个接受者。让这个应用程序可以通过接受者来获取第三方扩展。MEF提供了[Import]和[ImportMany]两种attribute。区别就是Import只能接

5、受符合协议的一个扩展,而ImportMany可以接受多个,并把多个扩展放入集合中。安装接受者这个产物的生产过程其实就是实现接口的过程,唯一的区别是我们要为这个实现打上个标签,从而告诉我们的组合引擎这个东西是给接受者的。MEF提供了Export来暗示这是一个可以提供给接受者的产物。符合协议的产物注:添加System.ComponentModel.Composition程序集到项目中。用MEF实现一个最简单的可扩展应用程序9/20/2021代码会自动去发现扩展,然后加入到应用程序中来。要做的只是把新扩展的程序集放入执行目录下的plugin目录中就可以了发动引擎示例代码namespace

6、Core{publicinterfaceIPlugin{stringText{get;}voidDo();}}9/20/2021协议接口IPlugin示例代码[ImportMany]publicIEnumerableplugins;privatevoidForm1_Load(objectsender,EventArgse){foreach(IPluginplugininplugins){Buttonbtn=newButton{Text=plugin.Text};btn.Click+=(s,arg)=>{plugin.Do();};btn.Width=100;thi

7、s.panel1.Controls.Add(btn);}}9/20/2021安装接收器示例代码namespacePluginInstance{[Export(typeof(IPlugin))]publicclassMyPlugin:IPlugin{publicstringText{get{return"Thisisademo";}}publicvoidDo(){MessageBox.Show(Text);}}}9/20/2021符合协议的产物MyPlugin示例代码p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。