分享(C#高级编程第6版doc)第36章 插件

分享(C#高级编程第6版doc)第36章 插件

ID:41037459

大小:228.50 KB

页数:21页

时间:2019-08-14

分享(C#高级编程第6版doc)第36章 插件_第1页
分享(C#高级编程第6版doc)第36章 插件_第2页
分享(C#高级编程第6版doc)第36章 插件_第3页
分享(C#高级编程第6版doc)第36章 插件_第4页
分享(C#高级编程第6版doc)第36章 插件_第5页
资源描述:

《分享(C#高级编程第6版doc)第36章 插件》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第36章插   件插件可以在以后给应用程序添加功能。我们可以创建一个主机应用程序,随时间的推移给它添加越来越多的功能--这些功能可以是开发团队编写的,其他供应商也可以创建插件,扩展该应用程序。目前,插件在许多不同的应用程序上使用,例如IE和VisualStudio。IE是一个主机应用程序,它提供了一个插件框架,许多公司都使用这个框架提供查看Web页面时的扩展程序。ShockwaveFlashObject可以查看带Flash内容的Web页面。Google工具栏提供了特殊的Google功能,可以在IE中快速访问。VisualStudio也有一个插件模型,可以用不同层次的扩展程

2、序扩展VisualStudio。定制应用程序总是可以创建插件模型,以动态加载和使用程序集中的功能。利用插件模型时,需要考虑许多问题。如何检测新的程序集?如何解决版本问题?插件可以改变主机应用程序的稳定性吗?.NETFramework3.5提供了一个框架,用程序集System.AddIn来保存和创建插件。这个框架也称为ManagedAddInFramework(MAF)。提示:插件还有其他称呼,如add-on或plug-in。本章内容如下:● System.AddIn体系结构● 创建简单的插件36.1 System.AddIn体系结构创建允许在运行期间添加插件的应用程序时,

3、需要处理一些问题。例如,如何找到插件,如何解决版本问题,使主机应用程序和插件可以独立地升级。要解决这些问题,有几种方式。本节讨论插件的问题和MAF解决它们的体系结构:● 插件的问题● 管道体系结构● 发现● 激活● 隔离● 生存期● 版本问题36.1.1 插件的问题要创建一个主机应用程序,动态加载以后添加的程序集,必须解决几个问题,如表36-1所示。表 36-1插件问题说明发现如何为主机应用程序查找新插件?这有几个不同的选项。一个选项是在配置文件中添加插件的信息。其缺点是安装新插件时,需要修改已有的配置文件。另一个选项是把包含插件的程序集复制到预定义的目录中,通过反射读取

4、程序集的信息。反射的更多内容可参见第13章激活程序集动态加载后,还不能使用new运算符创建它的实例。但可以用Activator类创建这类程序集。另外,如果插件加载到另一个应用程序域中或新进程中,还需要使用不同的激活选项。程序集和应用程序域的更多内容可参见第17章隔离插件可能会使主机应用程序崩溃,读者可能见过IE因各种插件而崩溃的情况。根据主机应用程序的类型和插件的集成方式,插件可以加载到另一个应用程序域或另一个进程中生存期清理对象是垃圾回收器的一个工作。但是,垃圾回收器在这里没有任何帮助,因为插件可能在另一个应用程序域中或另一个进程中激活。把对象保存在内存中的其他方式有引

5、用计数、租借和承办机制版本版本问题是插件的一个大问题。通常主机的一个新版本仍可以加载旧插件,而旧主机应有加载新插件的选项下面探讨MAF的体系结构,说明这个框架如何解决这些问题。MAF的设计目标如下:● 应易于开发插件● 在运行期间查找插件应很高效● 开发主机程序应是一个很简单的过程,但不像开发插件那么容易● 插件和主机应用程序应独立地升级36.1.2 管道体系结构MAF体系结构基于一个包含7个程序集的管道。这个管道解决了插件的版本问题。因为管道中的程序集之间的依赖性很低,所以合同、主机程序和插件升级到新版本可以完全互不干扰。图36-1显示了MAF体系结构的管道。其中心是合

6、同程序集。这个程序集包含一个合同接口,其中列出了插件必须实现、可以由主机程序调用的方法和属性。合同的左边是主机端,右边是插件端。图中还显示了程序集之间的依赖性。最左端的主机程序集与合同程序集没有依赖性,插件程序集与合同程序集也没有依赖性,这两个程序集都没有实现合同定义的接口,只是有一个对视图程序集的引用。主机应用程序引用主机视图;插件引用插件视图。视图包含抽象的视图类,该类定义的方法和属性与合同相同。 图 36-1图36-2显示了管道中类的关系。主机类与抽象的主机视图类有一个关联,并调用其方法。抽象的主机视图类由主机适配器实现。适配器在视图和合同之间建立连接。插件适配器实

7、现了合同的方法和属性。这个适配器包含对插件视图的引用,把来自主机端的调用传送给插件视图。主机适配器类定义了一个具体的类,它派生自主机视图的抽象基类,实现了方法和属性。这个适配器包含对合同的引用,把来自视图的调用传送给合同。 图 36-2有了这个模型,插件端和主机端可以完全独立地升级了,只是需要使用映射层。例如,如果主机的一个新版本使用全新的方法和属性,合同就仍可以保持不变,只有适配器需要修改。也可以定义新的合同。适配器可以修改,也可以同时使用几个合同。36.1.3 发现如何为主机应用程序查找新插件?MAF体系结构使用一个预定义

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

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

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