构建插件式的应用程序框架(一)----开篇

      说起插件(plugin)式的应用程序大家应该不陌生吧,记得很早以前有一款很流行的MP3播放软件winmap,它是我记忆里最早认识的一款使用插件模式的应用程序,你可以使用他的插件管理器插入很多的音乐效果器,皮肤,甚至是歌词显示的面板。接下来看到了Photoshop使用插件模式管理虑镜。最后发现只要是大一点的应用程序基本都使用了插件式的程序框架,就拿我们最常用的工具来说吧,Visual StudioOfficeDelphiEclipse等等。Eclipse将插件模式发挥到了及至,因为他是开源的的,所以众多的爱好者,开发出了让人应接不暇的插件。
       为什么使用插件式的应用程序框架呢?我的答案就是他为应用程序的功能扩展提供的无限的想象空间。一个应用程序,无论你前期做了多少的市场调查,需求分析做的多么完美,你也只是迎合一部分人的期望,更甚,你只迎合了一部分人的一部分期望,或者一部分人在某一时间的一部分期望。所以当程序发布以后,你依然有机会提供新的功能而不必重新发布程序,人们也可以根据自己的需要来开发新的功能来满足自己的需求,据我所知有很多的软件公司就是专门开发插件来赚钱,真是一举多得,何乐而不为呢?
       我们来看一些常见的提供插件模式的应用程序是如何实现插件功能的。据我的使用经验来看,Visual StudioOffice其实都是自动化程序,通过COM的方式提供了一组接口。开发人员可以利用这些接口来开发基于COM的插件,当插件开发完成后,注册COM组件。在Visual Studio中你可以使用Addin管理器来选择是否启用插件,而Office似乎省去了这一步,一旦你注册了Office插件,Office应用程序在启动的时候会自动加载插件。COM方式似乎最受微软的宠爱,因为COM是一种二进制重用标准,用户可以使用大部分流行的语言来开发插件。当然你也可以使用别的方式,比如普通DLL,只是这样对于开发人员来说适用面就窄了,因为各个厂商DLL的内部结构是不尽相同的,比VC开发出的DLLBorland C++builder开发出的DLL结构就不同,需要专门的工具进行转换。现在,还有另外一种方式,使用dotNetAssembly,使用dotNet的好处是开发简单,使用也同样简单(不需要注册),而且你也可用通过COM互操作让开发人员可以使用各种语言进行插件开发,当然用dotNet开发还是最简单的,省去不少中间过程。
         其实上面介绍的三种方式开发的插件最终还是寄宿在DLL中,从中我们就可以看出一些端倪。为什么使用DLL呢?DLL虽然也是PE格式,但是他是不能独立运行的,一般情况下,都是在运行时加载到应用程序的内存空间。插件模式正好是利用了这一点,插件不是应用程序的一部分,他以二进制的方式独立存在,由用户决定是否使用他。
      那么插件是如何与应用程序进行交互的呢?首先必须有一个契约,应用程序要声明我有哪些功能是可以被插件使用的,并且具备什么条件才能成为我的插件。其次,应用程序不依赖于插件,也就是说,没有你插件,我也可以很好的运行。再次,应用程序必须有一种策略来获取插件存在的位置,比如Visual studio是通过注册表的方式。最后,应用程序可以通过某种方式动态的加载插件。
      最近工作比较忙,没有时间写Blog,控件开发总结的那个系列停在那里好久了,汗一个,有空就尽快补上吧。这个系列也先开个头吧,不然又会被自己找各种借口扼杀了。

posted on 2007-02-13 22:48 纶巾客 阅读(16070) 评论(14) 编辑 收藏

评论

#1楼 2007-02-14 09:01 浪子      

期待下文:)  回复 引用 查看   

#2楼 2007-02-14 09:28 阿水      

哈哈 继续期待
不过你的那个控件系列,很不错哦 哈哈
 回复 引用 查看   

#3楼 2007-02-14 11:32 everysun[匿名][未注册用户]

强烈关注中,期待,等待中。。。。。  回复 引用   

#4楼 2007-02-14 13:09 极地银狐.NET      

期待,楼主要快快的写,不然打屁股,哈哈.  回复 引用 查看   

#5楼 2007-02-14 16:22 命运有自己的梦!      

呵呵!  回复 引用 查看   

#6楼 2007-02-14 20:58 Robber      

不错~~最近偶也一直正关注程序插件这方面``文章写的不错..继续关注~~  回复 引用 查看   

#7楼 2007-02-14 22:05 teli[未注册用户]

强烈关注,谢谢  回复 引用   

#8楼 2007-02-15 09:19 baoli[未注册用户]

控件的系列确实很好,热切关注+支持!!!  回复 引用   

#9楼 2007-02-20 20:50 JesseZhao      

期待你的系列文章啊
eclipse的插件体系感觉就很值得研究以下
 回复 引用 查看   

#10楼 2007-04-15 22:22 Anthan      

最近开始学习,很高兴能有你这个系列的文章
非常感谢。继续噢....
 回复 引用 查看   

#11楼 2008-02-15 19:17 春春罗宾汉      

救命啊老大,我用你的设计应用到项目中,麻烦大了,我的程序是服务程序
当存在自定义配置节

name="PluginSection"
type="PluginFramework.PluginConfigurationSection, PluginFramework"
/>




服务启动不了,报异常,
ConfigurationErrorsException,
把那一段删除就好了,可是你在程序里用的ConfigurationManager.GetSection("PluginSection")
从配置文件里取节信息,现在我要改到其它xml 该如何办,项目赶时间啊
 回复 引用 查看   

#12楼 2009-09-05 00:29 lxxxxl[未注册用户]

不错哦!  回复 引用   

#13楼 2011-11-15 14:29 冰歌      

支持  回复 引用 查看   

#14楼 2012-01-16 18:35 万味湖南特产网上商城      

好文,最近也在学习插件框架开发的知识  回复 引用 查看   

公告

本博客上的所有文章如非特别说明均为原创,如果要转载请注明文章出处。
昵称:纶巾客
园龄:6年3个月
粉丝:48
关注:0

导航

<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

统计

  • 随笔 - 48
  • 文章 - 0
  • 评论 - 384
  • 引用 - 116

搜索

 
 

常用链接

我的标签

随笔分类(44)

随笔档案(48)

文章分类

联系我

友情链接

积分与排名

  • 积分 - 265322
  • 排名 - 280

最新评论

阅读排行榜

评论排行榜

推荐排行榜