SharpDevelop插件系统完全分析
SharpDevelop插件系统完全分析
http://blog.csdn.net/tangxuehua/archive/2005/10/01/493460.aspx搜唐雪华(tangxuehua)这个人 前言
2005年2月,我申报了一个学校组织的大学生SRTP项目,项目的题目是数据结构动画演示系统。当初在做项目之前,我无意中买了一本书,书名为《SharpDevelop软件项目开发全程剖析》。买这本书的目的显而易见,就是想看看人家老外是怎么做项目的。谁知买来一看,基本看不懂。随后,我在书里介绍的网站上http://www.icsharpcode.net下载了其项目的源代码。解压一看,更是傻掉了,搞了半天还不知道整个程序的主窗体是怎么显示的,是什么时候显示的。尽管这样,我还是没有气馁,因为我对它整个程序有很多感兴趣的东西:如可拖动的面板,可高亮度显示的文本,专业的菜单,那些有着良好定义的XML属性配置文件,等等。所以我就开始认真学习它的源代码。但是在研究的过程中发现它的工程文件只能用自己才能打开,而且发现SharpDevelop不能调试,使我分析源代码很不方便。所以,我先从全局分析整个解决方案,最后终于把那些不熟悉项目全部都转换成了VS中能运行的项目,而且最后整个程序能够在VS中运行和调试。那是,我为了和大家一起分享我的成果,特地把SharpDevelop的VS版本放在了互联网上,希望能对那些也想学习其源代码的朋友有所帮助。从那之后,我就开始研究其插件(Add In)系统。现在,我已经对其中的三个项目很熟悉,并且将它们完全整合到了我的项目中去,在研究这三个项目的过程中,我对其源代码文件的目录结构按照我的理解作了调整,修改和优化了其中的部分源代码,另外为了帮助理解,我添加了很多的注视。好了,讲了很多的废话,下面我开始分析其源代码:
1. 一些基本的概念:
AddInTree(插件树)
SharpDevelop中的所有东西都是被挂接在一棵插件树中的。这棵插件树是在程序运行时动态创建的,树的所有路径(这些路径是逻辑路径)都定义在插件文件中。如果某个插件文件中有以下片断:
class = \ class = \ class = \
extensions = \ resource = \ extensions = \ resource = \
则说明插件树的根节点下有一个子节点Workspace,Workspace下又有Services和Icons两个子节点,Services下又有FileUtilityService,MessageService,TaskService三个子节点。。。
AddIn(插件)
SharpDevelop中的一个插件由一个插件文件(以addin为后缀名)定义,该插件文件中定义了很多的插件树的路径(由Extension节点指定)。另外,该插件文件中还指定了运行该插件所需的所有的程序集。如果一个插件文件中有一个节点如下:
则说明,运行该插件需要一个名为Base.dll的程序集,该程序集的路径为一个相对目录(相对于当前插件文件的目录)。 Codon(代码子) 按照我的理解,代码子是一个对象创建器。被创建的对象具有某个具体的功能。如ServiceCodon(服务代码子,这个名字在SharpDevelop中叫作ClassCodon)通过其BuildItem方法可以创建一个服务对象,该服务对象可为程序提供某种具体的服务;PadCodon(面板代码子)通过其BuildItem方法可以创建一个面板对象,该面板对象可能是一个属性面板,文件浏览面板,等等。 class = \ extensions = \ resource = \ 上面的两个XML元素代表两个代码子节点,这里我把他们叫做代码子节点是因为它们在XML文件中以元素(节点)出现,而在程序运行时这两个元素会被初始化成两个代码子对象。像上面这样,如果某个代码子节点有Class属性,则说明该代码子对象可以根据这个属性值创建一个对象,如果没有提供Class属性,则该代码子对象直接将自己返回。这里,值得一提的是,所有的Class属性所指定的类必须在上面介绍的 AddInTreeNode(插件树节点) 既然整个程序的结构是一棵插件树,就肯定有很多插件树节点。那么插件树节点有什么功能呢?其实,在整棵插件树中并不是所有的节点都有功能,有些节点没有任何功能,只是起到构成路径的作用;而有些节点如上面所讲的FileUtilityService,MessageService,TaskService三个子节点才有具体的功能,因为它们在整棵树中不仅代表一个节点,而且还代表一个代码子。实际上,在创建整棵树的过程中,如果为当前节点指定了一个代码子对象,则该树节点就具有具体的功能,如果没有指定,则该节点只是起到构成路径的作用。 2. 整个插件系统的创建过程: 为了方便分析,我用我自己的项目代码来给大家分析,各位看官不必担心,因为我只是稍微修改了其插件系统,大部分代码没有变化。所以在阅读下面的内容之前建议大家去我的个人网站(http://www.netfocus.cn)下载程序源代码“数据结构动画演示系统“,以方便你理解本文。 和SharpDevelop一样,程序的入口点在\\src\\StartUp\\DataStructureMain.cs的Main函数中。至于前面语句我在这里就不在解释了,我已经标了注视。下面从AddInTreeSingleton.CreateAddInTree()方法开始分析。首先,从AddInTreeSingleton这个类的名在来看,这个类应该采用Singleton设计模式。下面转入CreateAddInTree方法,
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




