SharpDevelop的主要任务是加载和生成AddIn树。SD的核心程序由三个project 组成,即StartUp、ICSharpCode.SharpDevelop、ICSharpCode.Core。在其中实现了包括内核的主要任务在内的几个基本服务。

Add-ins又叫Plug-ins中文中我们称做插件。他与核心的基础结构与其余代码之间都是相互分离的,我们可以在AddIns目录中找到它们。而核心部分位于src/SharpDevelop/Core目录中。我们下面将主要讨论AddIn树的结构和实现,与AddIn树的对象创建机制。
AddIn树是通过singleton模式来实现的。AddIn树是通过为插件定义的一个XML来加载的,在这个XML中引用实现插件的DLL。DLL来提供代码实现,XML定义将其插入到AddIn树的方式和位置。以下是StartPage(SD的启始页插件)的XML,这个XML被命名为StartPage.addin。
< AddIn name         = "Start Page"
       author      = "Georg Brandl"
       copyright    = "prj:///doc/copyright.txt"
       description = "VS like Start Page for #develop">
    
     < Manifest >
         < Identity name = "ICSharpCode.StartPage"/>
     </ Manifest >
    
     < Runtime >
         < Import assembly = "StartPage.dll"/>
     </ Runtime >
     < Path name = "/SharpDevelop/Workbench/MainMenu/View">
         < MenuItem id = "ShowStartPage"
                   insertafter  = "ViewItemsSeparator"
                   insertbefore = "StartPageSeparator"
                   label = "${res:XML.MainMenu.ViewMenu.ShowStartPage}"
                    icon  = "Icons.16x16.BrowserWindow"
                   class = "ICSharpCode.StartPage.ShowStartPageCommand"/>
         < MenuItem id = "StartPageSeparator"
                     insertbefore = "FullScreen"
                     type = "Separator"/>
     </ Path >
    
     < Path name = "/Workspace/AutostartNothingLoaded">
         < Class id = "ShowStartPageCommand"
                class = "ICSharpCode.StartPage.ShowStartPageCommand"/>
     </ Path >
    
     < Path name = "/SharpDevelop/Views/Browser/SchemeExtensions">
         < BrowserSchemeExtension id     = "startpage"
                                 class = "ICSharpCode.StartPage.StartPageScheme"/>
     </ Path >
</ AddIn >
这些XML用来携带插件信息,<RunTime>节点提供程序集信息。之后定义了<Path>节点
来提供功能的命名空间。这样为反射执行提供了足够信息。
AddIn树是由节点和路径组成的,AddIn是树的节点,路径的作用是构造树并不是真正的节点。IDE根据这些节点(AddIn)的定义内容更改行为。在SD中所有可见元素都由节点定义,大多数不可见元素,如键盘命令cursor keys,在插件树中也被作为节点实现。
在项目ICSharpCode.Core中提供了一些的服务:FileUtility、LoggingService、MenuService、MessageService、PropertyService、ResourceService、StringParser、ToolBarService。通过这些服务SD的内核可以获取到所有需要的资源。正是由于这些服务的存在才使得SharpDevelop更具灵活性。这些服务的存在也为AddIn的实现提供了可能。

SharpDevelop学习笔记(4)——SharpDevelop的核心相关推荐

  1. libevent学习笔记六:libevent核心事件event

    libevent学习笔记六:libevent核心事件event 前面对reactor模式.事件处理流程.libevent源代码结构等有了高层的认识后,接下来将详细介绍libevent的核心结构even ...

  2. 关于“labuladong的算法小抄”的学习笔记---第0章核心框架汇总的前半部分框架(c++版)

    目录 作者给自己的话 一.学习算法和刷题的框架思维 1.数据结构的存储方式 2.数据结构的基本操作 3.算法刷题指南 二.labuladong的刷题心得 1.算法的本质 2.数组/单链表系列算法 3. ...

  3. 关于“labuladong的算法小抄”的学习笔记---第0章核心框架汇总的后半部分技巧(c++版)

    目录 前言 一.回溯算法秒杀所有排列/组合/子集问题 回溯和DFS之间区别---遍历树枝or遍历节点 1.子集(元素无重不可复选) 2.组合(元素无重不可复选) 3.排列(元素无重不可复选) 4.子集 ...

  4. 【学习笔记】系统观核心管理理论

    系统观核心管理理论 说明:文章整理自网络上某免费智能制造IT项目管理课程,仅供自学用,其中涉及的图片很值得收藏细看,如有侵权,请联系撤下. 一.精益生产对智能制造的影响 IT项目模型主要管理基础: 制 ...

  5. Spring Boot学习笔记:Spring Boot核心配置

    文章目录 一.Spring Boot基本配置 (一)入口类与@SpringBootApplication 1.项目入口类 - SpringBootDemoApplication 2.核心注解 - @S ...

  6. 莫队算法(普通莫队、带修莫队、树上莫队、不删除莫队)学习笔记【理解+套路/核心代码+例题及题解】

    一.理解 我的理解就是巧妙的暴力,利用双指针以及分块思想,巧妙的移动双指针,时间复杂度可以达到O(NlogN). 强推博客:写的又好又全.链接 二.套路 1.普通莫队 [1]核心代码 bool cmp ...

  7. 【学习笔记】java基础核心总结

    记录:windows下查询端口占用 netstat -ano taskkill -pid 3648 -F netstat -ano | findstr 8082 基础部分 1.JDK的主要内容如下: ...

  8. C++基础学习笔记(五)——核心编程PART3

    参考链接:https://www.bilibili.com/video/BV1et411b73Z?p=99&vd_source=b4d9cee68649c8adcb1e266f7147cd5c ...

  9. Elasticsearch学习笔记2:ES核心概念 -- 索引、倒排索引、类型、文档

    一.ES和关系型数据库的对比 Elasticsearch Relational DB 索引(index) 数据库(database) 类型(types) 表(tables) 文档(documents) ...

最新文章

  1. android流量控制的实现,Android系统中P2P应用数据包捕获及流量控制研究
  2. C++赋值运算符与赋值表达式
  3. 更智能:人工智能与能源行业的革命
  4. 【C/C++】“std::basic_ios _Elem,_Traits:无法访问private变量在类中的声明”错误原因与解决办法
  5. L2-001 紧急救援-团体程序设计天梯赛GPLT
  6. TypeScript Mixins 概念介绍
  7. SLAM Cartographer(4)对象Node
  8. 接口测试人员需要掌握的知识技能
  9. 德标螺纹规格对照表_德标与国标对照表
  10. 作为技术面试官,我在面试时考虑什么?
  11. Ubuntu18.04 用一条命令 快速安装 FBReader
  12. 量化之王:文艺复兴科技公司西蒙斯
  13. python documents in chinese_python xlwt 设置 格式
  14. Elasticsearch-SERVICE_UNAVAILABLE/1/state not recovered
  15. 【从零开始学习MySql数据库】(3)函数与子查询和连接查询
  16. DB2插入单引号 双引号的问题
  17. 门头沟的《一出好戏》
  18. C和C++和Java的一些区别
  19. ICSharpCode.SharpZipLib 压缩、解压文件
  20. vs2010单文档对话框窗口界面设置

热门文章

  1. 【转】一个老程序员的心理话
  2. 信息学奥赛与大学计算机课程,信息学是什么课程
  3. 如何去掉google map上导航和GPS按钮
  4. google Map API实现地址解析
  5. 字体反爬,下载 .woff 文件
  6. SD2.0大会又一看点:职业论坛上,阿朱PK Leo
  7. Android App加载图片内存空间计算
  8. 15计算机应用专业综合理论试卷答案,2013年南通市对口单招计算机应用专业综合理论第二次模拟试卷(含答案).doc...
  9. 云豹php短视频源码实现身份证验证的方法
  10. DeepNet :Scaling Transformers to 1000 Layer