SharpDevelop插件系统完全分析(2)
首先判断插件树是否为空,即插件树是否已经创建,如果没有创建,则实例化一个默认的插件树对象。代码如下:
if(addInTree == null)
{
addInTree = new DefaultAddInTree();
InternalFileService fileUtilityService = new InternalFileService();
StringCollection addInFiles = null;
if (ignoreDefaultCoreAddInDirectory == false) //如果没有忽略默认的插件路径,即采用默认的插件路径
{
addInFiles = fileUtilityService.SearchDirectory(defaultCoreAddInDirectory, \
InsertAddIns(addInFiles);
}
else //如果忽略默认的插件文件的路径
{
if (addInDirectories != null)
{
foreach(string path in addInDirectories)
{
addInFiles = fileUtilityService.SearchDirectory(Application.StartupPath + Path.DirectorySeparatorChar + path, \
InsertAddIns(addInFiles);
}
}
}
} 在DefaultAddInTree的构造函数中,通过LoadCodonsAndConditions(Assembly.GetExecutingAssembly());
从核心项目Core程序集中加载所有的代码子和条件对象。那么这个函数到底作了什么呢?
首先从程序集中得到所有的类型,然后判断如果某个类型是从AbstractCodon抽象类继承而来并且这个类型上有CodonNameAttribute特性,则说明当前类是一个具有某个功能的代码子类,然后立即创建一个CodonBuilder对象,并将该对象添加到一个Factory工厂对象的Builders哈希表中。添加时以CodonName为主键。另外,对于条件操作也是类似操作。
继续回到CreateAddInTree方法中,判断是否忽略默认的插件文件路径,如果不忽略,则使用默认的插件文件路径“..\\addIns“来搜索所有的插件文件,并放到一个字符串集合中。然后调用InsertAddIns方法。下面是这个方法的源代码:
static void InsertAddIns(StringCollection addInFiles)
{
foreach (string addInFile in addInFiles)
{
AddIn addIn = new AddIn();//先新建一个插件实例
try
{
实例
树中
}
addIn.Initialize(addInFile);//通过当前插件文件来初始化这个插件 addInTree.InsertAddIn(addIn);//将这个初始化好的插件插入到插件} catch (Exception e) { throw new AddInInitializeException(addInFile, e); }
}
这个方法的功能是接受一个插件文件的集合列表参数,然后对每个插件文件都创建一个插件对象,并将该插件对象插入到插件树中。在这个过程中,关键是插件对象如何创建?以及创建好的对象如何插入到插件树中?所以,如果这两个问题解释清楚了,那么,整个插件系统的创建过程就清楚了。现面先分析插件对象如何创建,转入AddIn文件的Initialize方法:
该方法的关键是在foreach循环中,它对插件文件根节点下的所有子节点进行迭代,判断子节点的类型,
如果为RunTime节点,则将该节点的所有子节点所指定的程序集加载到内存,并将该程序集对象添加到一个哈希表中。当然,这里并不是只是简单的根据程序集文件名创建一个程序集对象,在创建了程序集对象之后,还像刚开始从核心项目Core程序集加载所有的代码子对象一样加载了当前程序集中的所有的代码子和条件对象。
如果为Extension节点,则说明当前节点是一个功能扩展,所谓功能扩展是指在某个插件树路径下的功能集合。一般情况下一个功能扩展的特点是:
一个路径(Path):指定该功能扩展在整个系统中的逻辑路径;
一些可以嵌套定义的代码子节点;
一些作用在代码子节点上的条件节点;
所以,在SharpDevelop中特别定义了一个Extension类,专门用来描述XML文件中定义的Extension节点。
在遇到Extension节点时调用AddExtensions方法,该方法接受一个Extension XML节点,在AddExtensions方法内部关键是AddCodonsToExtension方法,该方法比较复杂,下面我分析其中最关键的default部分:
…… 此处隐藏:237字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [互联网资料]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 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




