SharpDevelop原始碼分析 二 頭緒

2021-06-15 22:39:22 字數 1903 閱讀 2621

servicemanager.services.addservice(new messageservice());

servicemanager.services.addservice(new resourceservice());

servicemanager.services.addservice(new iconservice());

通過servicemanager(服務管理器)加入三個系統預設的服務,訊息服務、資源服務、圖示服務。這三個服務中,訊息服務是顯示各種資訊提示,另外兩個是屬於系統的資源,sharpdevelop通過服務來進行統一呼叫和管理。

servicemanager.services.initializeservicessubsystem("/workspace/services");

初始化其他的服務。sharpdevelop把服務定義在外掛程式樹的/workspace/services這個路徑中,凡是在這個路徑下的外掛程式都被認為是服務,因此如果你自己定義了乙個服務的話,也需要掛到這個路徑下(這裡就是系統服務的擴充套件點了)。

注意!這一步中,在我們的眼皮子底下悄悄的進行了乙個重要的初始化工作。各位看官請看,servicemanager 定義在/src/main/core/services/ servicemanager.cs檔案中,察看它的initializeservicessubsystem方法,我們發現這樣一行

addservices((iservice)addintreesingleton.addintree.gettreenode(servicespath).buildchilditems(this).toarray(typeof(iservice)));

在這裡,addintreesingleton首次呼叫了addintree(外掛程式樹)的例項。按照singleton模式,只有在首次呼叫的時候才會初始化例項,這裡也是同樣如此。整個系統的addintree是在這一步中進行了初始化工作,稍候我們將詳細介紹addintree如何進行初始化工作,先順便看看服務的初始化。在servicemanager的initializeservicessubsystem方法中,通過addintree檢索服務外掛程式路徑下的所有配置,並通過它來讀取、建立具體的物件,然後加入到服務列表中。之後通過乙個迴圈,逐個的呼叫各個服務的initializeservice方法初始化服務。

addintree的初始化工作容我們稍候再看,先把主體的**看完。

commands = addintreesingleton.addintree.gettreenode("/workspace/autostart").buildchilditems(null);

for (int i = 0; i < commands.count - 1; ++i)

/workspace/autostart是系統自動執行命令的擴充套件點路徑,定義在這個路徑下的外掛程式會在系統啟動的時候自動執行。在這裡,通過外掛程式樹初始化建立處於這個路徑下的command(命令),並逐一執行。buildchilditems方法的功能是建立這個擴充套件點下的command列表,我會在介紹addtree的時候具體說明它的實現。

主程式**的最後,初始化完畢、關閉封面窗體,然後執行命令列表中最後乙個命令(也就是系統的主介面)。在主介面退出的時候,系統解除安裝所有的服務。

在這部分**中,我們知道了兩個系統指定的擴充套件點路徑 /workspace/services 和 /workspace/autostart ,我們實現服務和指定系統自動執行命令的時候就可以掛到這兩個擴充套件點路徑下了。

託反射的福,servicemanager.services可以通過型別(介面)來查詢具體的例項,也就是getservices方法。但是servicemanager的具體實現我們可以容後再看,這裡已經不是最緊要的部分了。

接下來,我們來看看整個外掛程式系統的核心-addintree的**,看看它是如何通過外掛程式配置進行初始化並建立起整個系統的外掛程式樹骨幹。

SharpDevelop原始碼分析 二 頭緒

在大學課程裡面,我對於模擬電路總是搞不清楚,直到現在也是這樣。我總覺得電路圖很奇怪,總會問 這部分電路是做什麼用的 為什麼會有這樣的效果 在我的腦海裡面,每部分的電路都應該有一定的用處,可是我總是看不明白。我媽媽說,我的思路被軟體所固化的太久了,看電路圖不應該總是乙個個模組的看,正確的方法應該是從電...

SharpDevelop原始碼分析 二 頭緒

在大學課程裡面,我對於模擬電路總是搞不清楚,直到現在也是這樣。我總覺得電路圖很奇怪,總會問 這部分電路是做什麼用的 為什麼會有這樣的效果 在我的腦海裡面,每部分的電路都應該有一定的用處,可是我總是看不明白。我媽媽說,我的思路被軟體所固化的太久了,看電路圖不應該總是乙個個模組的看,正確的方法應該是從電...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...