在
構建外掛程式式的應用程式框架(二
)----訂立契約
一文中,可以看到我們的
介面是派生於
iservicecontainer
介面的。為什麼要派生於
iservicecontainer
呢?我們來看看
iservicecontainer
的定義,它有幾個
addservice
方法和removeservice
方法以及從
iserviceprovider
繼承過來的
getservice
方法。service
本身是.net
設計時架構的基礎,
service
提供設計時物件訪問某項功能的方法實現,說起來還真拗口。就我看來,
servicecontainer
機制的本質就是解耦合,就是將型別的設計時功能從型別本身剝離出來。如果你把型別的設計時功能也封裝到型別裡,這樣的型別包含了很多只有開發人員才會用到而終端使用者根本不需要的功能,使得型別既臃腫有不便於擴充套件。而將設計時功能剝離出來,這樣型別就可以不依賴於特定的設計環境,之所以現在有這麼多非官方的
.net
設計環境可能就是這個原因吧。
我們的外掛程式式的應用程式框架正好也需要這樣乙個鬆散的架構,我就移花接木把它應用到我們的框架中。
servicecontainer
是.net
提供的iservicecontainer
介面的時候就直接使用的
servicecontainer
。我們在使用
service
架構的時候,總是傾向於有乙個根容器,各個
service
容器構成了乙個
service
容器樹,每乙個節點的服務都可以一直向上傳遞,直到根部,而每乙個節點請求
service
的時候,我們總是可以從根節點獲得。我把這個根節點比喻成乙個服務中心,它彙總了所有可提供的服務,當某個物件要請求服務(
getservice
)只需要向根結點傳送要獲得的服務,根結點就可以把服務的物件傳遞給它。
從另外乙個角度看,
servicecontainer
為我們的外掛程式是應用程式提供了有力的支援,利用
servicecontainer
,你不但可以獲得應用程式所提供的所有的功能,而且你還可以通過外掛程式向應用程式新增
service
,而你新增的
service
又可以服務另外的
service
,這樣我們的應用程式框架就更加的靈活了。但是任何東西都是有兩面性的,帶來靈活的同時也為開發人員的工作增加了複雜度,所以使用
servciecontianer
開發的應用程式必須提供足夠詳細的文件,否則開發人員可能根本不知道你到底有多少
service
可以用,因為很多的
service
是通過外掛程式提供的,可能應用程式的作者都不會知道程式發布以後會出現多少
service
。寫了這麼多,可能接觸過
servicecontainer
的朋友已經覺得羅唆了,沒接觸過的還是覺得說得莫明其妙。有空接著寫,我會建立幾個簡單的服務演練演練,增強一下感性認識,呵呵。
構建外掛程式式的應用程式框架 七 基本服務
既然做好了框架,我們就希望為某個目標服務,我們要提供一些基本的服務,方便使用者繼續擴充套件他的功能。首先想到的功能就是,選單,工具欄的管理,接下來我們要實現一些更流行的功能,比如停靠工具欄等等。如何實現這些服務呢?我們希望我們的外掛程式在執行時可以獲得應用程式本身的選單,工具條,停靠工具欄等等,然後...
構建外掛程式式的應用程式框架 七 基本服務
既然做好了框架,我們就希望為某個目標服務,我們要提供一些基本的服務,方便使用者繼續擴充套件他的功能。首先想到的功能就是,選單,工具欄的管理,接下來我們要實現一些更流行的功能,比如停靠工具欄等等。如何實現這些服務呢?我們希望我們的外掛程式在執行時可以獲得應用程式本身的選單,工具條,停靠工具欄等等,然後...
構建外掛程式式的應用程式框架 五 管理外掛程式
我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在 哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。首先解決的就是外掛程式放...