構建外掛程式式的應用程式框架 通訊機制

2022-03-16 02:22:30 字數 1366 閱讀 6596

前天發了構建外掛程式式的應用程式框架(五

)----管理外掛程式

這篇文章,有幾個朋友在回覆中希望了解外掛程式之間是如何通訊的。

service container

),service

是我所提到的外掛程式式的應用程式框架的基礎,我們也可以回頭看看

的介面定義

是派生於

iservicecontainer

。我把應用程式提供的相關的功能抽象成乙個乙個的

service

,比如文件管理的,我們就抽象成

idocumentservice

,停靠工具欄管理功能抽象成

idockbarservice

,選單管理的功能抽象成

imenuservice

,等等。我在第四篇文章裡也提到了「我們在使用

service

架構的時候,總是傾向於有乙個根容器,各個

service

容器構成了乙個

service

容器樹,每乙個節點的服務都可以一直向上傳遞,直到根部,而每乙個節點請求

service

的時候,我們總是可以從根節點獲得。我把這個根節點比喻成乙個服務中心,它彙總了所有可提供的服務,當某個物件要請求服務(

getservice

)只需要向根結點傳送要獲得的服務,根結點就可以把服務的物件傳遞給它。」

是從iservicecontainer

介面派生出來的,而我們的應用程式主視窗又是從

介面派生出來的,所以,我們的應用程式主視窗就是乙個

servicecontainer

。從iplugin

的定義來看,它有乙個

介面屬性,這個

屬性是什麼時候指定的呢,在第五篇文章的源**裡我們看到,當每乙個

plugin

被例項化的時候,由

pluginservice

指定的,所以在每乙個

plugin

被load

之前,已經被指定,而代表這個

介面的例項正是我們的應用程式主視窗,而它正是我們所需要的服務容器。一旦我們能夠獲得

例項,我們就可以獲得整個應用程式所提供的所有的服務。假設我們要獲得文件服務,就可以使用

plugin

的private

void

checkexistedplugin()}}

}當然,要在外掛程式中獲得例項,你必須在應用程式裡或者其他外掛程式裡例項化服務物件,然後新增到服務容器裡,還拿上邊的例子,我們在應用程式裡例項化了

pluginservice

,然後新增到了容器裡,**如下:

public

mainform()

原文出自:

構建外掛程式式的應用程式框架 五 管理外掛程式

我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在 哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。首先解決的就是外掛程式放...

構建外掛程式式的應用程式框架 五 管理外掛程式

我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在 哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。首先解決的就是外掛程式放...

構建外掛程式式的應用程式框架 七 基本服務

既然做好了框架,我們就希望為某個目標服務,我們要提供一些基本的服務,方便使用者繼續擴充套件他的功能。首先想到的功能就是,選單,工具欄的管理,接下來我們要實現一些更流行的功能,比如停靠工具欄等等。如何實現這些服務呢?我們希望我們的外掛程式在執行時可以獲得應用程式本身的選單,工具條,停靠工具欄等等,然後...