上篇部落格中,我們講解了建立拓展模型和建立拓展模型物件,下面我們繼續介紹,完成後面的步驟。
主介面為上下布局,上部分是乙個menustrip,下部分是乙個tabcontrol。下面我們將通過osgi.net的擴充套件機制,將其它外掛程式註冊的擴充套件資訊轉換成這個主介面的選單項。
首先,我們先看一下如何獲取擴充套件資訊並監聽事件。**如下,在
/// /// 處理擴充套件資訊。
///
private void hanldeextension()
// 4 監聽擴充套件變更事件
bundlecontext.extensionchanged += bundlecontextextensionchanged;
}
其次,是擴充套件變更事件處理的**,當外掛程式啟動時,其擴充套件資訊註冊到
osgi.net核心,當外掛程式解除安裝時,其擴充套件資訊會被解除安裝掉,因此
,當擴充套件資訊新增時,我們需要為其建立選單項;反之,需要刪除選單項和已經顯示的內容。
private void bundlecontextextensionchanged(object sender, extensioneventargs e)
else if (e.action == collectionchangedaction.remove)}}
下面我們看一下為
建立相應介面元素的**,這裡我們利用該物件建立了乙個頂層選單項和所有子選單項。
/// /// 擴充套件變更事件是乙個非同步事件,即是乙個新的執行緒來處理事件。
/// 因此,需要將擴充套件變更事件對介面的變更通過**傳送到介面
/// 執行緒,由其來更新介面。
///
;// 如果當前執行緒不是介面執行緒,則通過invoke來處理介面變更
if (invokerequired)
else // 否則,直接操作介面
}
最後是移除介面元素的原始碼。
/// /// 擴充套件變更事件是乙個非同步事件,即是乙個新的執行緒來處理事件。
/// 因此,需要將擴充套件變更事件對介面的變更通過**傳送到介面
/// 執行緒,由其來更新介面。
///
workspacetabcontrol.tabpages.remove(tab);}}
}};// 如果當前執行緒不是介面執行緒,則通過invoke來處理介面變更
if (invokerequired)
else // 否則,直接操作介面}}
總結:
下面總結一下如何做介面外掛程式:
首先建立乙個外掛程式
---將
extensionmodel
資料夾中的
3個基礎類新增進來——新增介面窗體——編寫介面窗體**。用**展示為:
建立乙個空
windows
窗體或高階
windows
窗體,在
program.cs
檔案中加入以下**,作為程式的入口點;
再新增乙個
windows
窗體外掛程式,以下**操作都是該類庫中的操作。
通過run
(forminstance
)找到外掛程式的
mainform
窗體,例項化,因為是介面外掛程式所以要處理節點(即之前提過的掃瞄
manifest
檔案,通過其內容動態載入選單)。
看一下hanldeextension
()方法,步驟很清楚先例項化在獲取拓展資訊;
不管是windows
或web
或其他應用程式
,**變動不大
,只需要把相應的控制項名稱、控制項載入的個別屬性更改一下即可,用起來很方便。
介面外掛程式完成之後,我們將外掛程式發布之後,真正主程式的目錄如下截圖:
很清晰,明了,通過
program.cs
檔案,載入外掛程式,通過介面外掛程式載入其他選單,主程式只是乙個容器,各個功能都是乙個個的積木,搭起來就是乙個多功能自定義的簡單程式。通過這張圖可以看出該程式的健壯性很好,即使某個外掛程式不能用了,但是不會影響其他功能外掛程式的使用。
需要注意的是:我們做的介面外掛程式的基礎是
iopenwork
提供的uishell.pageflowservice
外掛程式。我們通過引用該外掛程式才能做響應的操作。
別忘了把這句**放在該外掛程式的
manifest
檔案中,否則外掛程式介面不會顯示載入。
至此,介面外掛程式製作介紹完成,不足之處敬請指正~~~~~~
六 介面 Spring介面FactoryBean
factorybean是用來向容器中注入bean的介面。而beanfactory是從容器中取bean的介面。定義fish實體類 author zhangjianbing date 2020年9月23日 data public class fish public fish string name,in...
TypeScript 基礎2 介面
介面通常以inte ce來宣告,介面是抽象方法的集合,即只宣告,不定義具體值。類描述物件的屬性和方法。介面則包含類要實現的方法 除非實現介面的類是抽象類,否則該類要定義介面中的所有方法 乙個實現介面的類,必須實現介面內所描述的所有方法,否則就必須宣告為抽象類。介面支援多繼承,乙個類可以實現多個介面 ...
mochijson2 介面使用
傳聞erlang otp會提供json資料處理庫,有些討論但不見下文,暫且用mochiweb的mochijson2.erl吧 decode test mochijson2 decode sjson mjson mochijson2 decode sjson io fwrite test json t...