C#反射實現簡單的外掛系統
轉載自:C#反射實現簡單的外掛系統
如果用過一些優秀的開源或是非開源的應用軟體,就會發現這些軟體的一個很大的優勢就是其開放性,任何有能力的人都可以為其開發不同的外掛來增強其的功能。比如著名的foobar2000,Vim和TotalCommander等等。
C#的反射可以用來實現一個簡單的外掛系統。思路很簡單,我們建立一個解決方案,包含三個工程,一個為我們的軟體MyApplication,一個為外掛介面IPlugin,一個為具體的外掛MyPlugin。外掛系統的基本思路是我們用一個介面類庫,來定義我們軟體可以使用的外掛必須實現的方法簽名。然後我們的軟體MyApplication通過引用該IPlugin dll來動態呼叫,而具體的實現外掛MyPlugin則引用該介面來實現具體的方法。這樣我們的應用程式就能在不知道具體外掛的情況下呼叫外掛了。。
結構圖如下:
關鍵程式碼也就是通過對程式集載入。搜尋到對應介面的實現類。然後呼叫即可。
Assembly a = Assembly.LoadFrom(AssemblyName);
foreach (Type t in a.GetTypes())
{
if (t.GetInterface("IMyFunction") != null)
{
try
{
IMyFunction pluginclass = Activator.CreateInstance(t) as IMyFunction;
pluginclass.doSomething();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
執行結果:
相關文章
- PHP外掛系統的實現(七):外掛案例PHP
- PHP外掛系統的實現(五):觸發外掛PHP
- PHP外掛系統的實現(一)PHP
- jQuery LightBox外掛原理的簡單實現jQuery
- PHP外掛系統的實現(二):獲取全部外掛資訊PHP
- PHP外掛系統的實現(三):實現探測器PHP
- 簡簡單單的Vue3(外掛開發,路由系統,狀態管理)Vue路由
- 原生 JS實現一個簡單分頁外掛JS
- PHP外掛系統的實現(四):實現註冊動作PHP
- 聊聊 Webpack 外掛系統的關鍵實現 TapableWeb
- C#反射的Assembly的簡單應用C#反射
- 資料統計表外掛,highcharts外掛的簡單應用
- Web列印外掛實現思路(C#/Winform)WebC#ORM
- PHP外掛系統的實現(六):完整經理類PHP
- ServerSocket實現簡單的廣播系統Server
- [外掛擴充套件]簡單的IP記錄外掛套件
- 跟著辛星用PHP的反射機制來實現外掛PHP反射
- 非常簡單的使用jqueryfancybox外掛實現的檢視圖片效果jQuery
- ZOOM – 簡單的 jQuery 相簿外掛OOMjQuery
- 簡單快遞系統 java實現Java
- Vue-cli@3.0 外掛系統簡析Vue
- CloudNotes之桌面客戶端篇:外掛系統的實現Cloud客戶端
- javascript操作cookie簡單外掛JavaScriptCookie
- 學生管理系統java簡單實現Java
- GFS(谷歌檔案系統)的JAVA簡單實現谷歌Java
- 系統引導載入器的簡單實現
- c#實現最簡單的socket通訊C#
- c#實現簡單的俄羅斯方塊C#
- C# WebSocket的簡單使用【使用Fleck實現】C#Web
- VS外掛開發實現簡單的 ViewModel 和 View 之間的切換View
- Nutch外掛系統
- C# 簡單反射實現winform左側樹形導航,右側切換內容C#反射ORM
- 編寫一個簡單的babel外掛Babel
- MybatisPlus的分頁外掛簡單使用MyBatis
- Lumen/Laravel 整合 GatewayWorker (Workerman),實現簡單的聊天系統.LaravelGateway
- 使用簡單的Java程式碼實現酒店管理系統Java
- C# 反射 + Quartz,實現流程處理C#反射quartz
- wordpress外掛開發03-簡單的all in one seo 外掛開發