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

2021-08-29 18:44:23 字數 2002 閱讀 9276

既然做好了框架,我們就希望為某個目標服務,我們要提供一些基本的服務,方便使用者繼續擴充套件他的功能。首先想到的功能就是,選單,工具欄的管理,接下來我們要實現一些更流行的功能,比如停靠工具欄等等。

如何實現這些服務呢?我們希望我們的外掛程式在執行時可以獲得應用程式本身的選單,工具條,停靠工具欄等等,然後向他們新增專案,比如加入乙個選單項,新增乙個工具欄按鈕。為了在執行時獲得某個選單或者工具欄,我們要為每乙個選單後者工具欄分配乙個key,然後放到乙個詞典中,當需要的時候,我們通過這個key來獲得例項。對於這個key呢,在我的例子比較簡單就是他的名字,我們來看看toolstripservice的**:

usingsystem;usingsystem.collections.generic;usingsystem.text;usingsystem.windows.forms;namespacepluginframework

#region itoolstripservice memberspublicsystem.windows.forms.toolstrip gettoolstrip(stringtoolstripname)

returntoolstrip;

}publicvoidaddtoolstrip(stringtoolstripname, system.windows.forms.toolstrip toolstrip)

else

}}publicvoidaddtoolstrip(stringtoolstripname,

system.windows.forms.toolstrip toolstrip,

toolstripdockstate option)

elsebreak;casetoolstripdockstate.right:

break;casetoolstripdockstate.top:

break;casetoolstripdockstate.bottom:

break;}}

}publicvoidremovetoolstrip(stringtoolstripname)

elseelseelse

}toolstrips.remove(toolstripname);

}#endregion}

}

對於檢視或者是停靠工具欄來說,最好是不要直接在詞典中放入例項,而是應該將物件的型別放入到詞典中,因為,檢視和停靠工具欄本身都是從form派生而來,所以,當檢視或者是停靠工具欄被關閉的時候,物件就被銷毀了,而物件的建立在是外掛程式的load方法裡完成的,我們不可能再去呼叫外掛程式的load方法,這樣給我們的使用帶來了不便,所以我們應該註冊型別,然後在service中實現乙個show方法是比較合理的,這裡為了演示方便,我就直接在load裡面例項化了,並把例項放到了詞典裡。

下邊這個圖例裡顯示了外掛程式加入的停靠工具欄,工具欄,乙個新的選單「view」和view選單的子選單:

最近實在是沒有時間,文章發的很慢,也寫的很錯,說的不清楚的地方,可以參考一下源**,望各位朋友見諒。

源**

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

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

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

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

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

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