zoukankan      html  css  js  c++  java
  • SharpDevelop学习笔记(4)——SharpDevelop的核心

    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>
     
         <Pathname = "/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">
             <BrowserSchemeExtensionid    = "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的实现提供了可能。

  • 相关阅读:
    经常让程序员恼火的一些事情你是否也遇到过一些?
    CRC文件解压缩问题
    你在淘宝买件东西背后的复杂技术 技术普及帖
    程序员需要戒骄戒躁
    IT路上的应该注意自我规划 学习规划与自我修炼
    腾讯,我最恨别人用枪顶着我的头(转)
    软件管理,软件生命周期,软件过程名词解释
    程序员需要掌握的最终技术是什么? “终极技术”:应对困境的方法和信念
    程序员如何缓解“电脑病”
    新浪微博XSS攻击事件
  • 原文地址:https://www.cnblogs.com/tianyamoon/p/1019527.html
Copyright © 2011-2022 走看看