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
- PHP外掛系統的實現(二):獲取全部外掛資訊PHP
- 簡簡單單的Vue3(外掛開發,路由系統,狀態管理)Vue路由
- PHP外掛系統的實現(三):實現探測器PHP
- 原生 JS實現一個簡單分頁外掛JS
- PHP外掛系統的實現(四):實現註冊動作PHP
- 聊聊 Webpack 外掛系統的關鍵實現 TapableWeb
- Web列印外掛實現思路(C#/Winform)WebC#ORM
- PHP外掛系統的實現(六):完整經理類PHP
- ServerSocket實現簡單的廣播系統Server
- [外掛擴充套件]簡單的IP記錄外掛套件
- 簡單快遞系統 java實現Java
- VS外掛開發實現簡單的 ViewModel 和 View 之間的切換View
- Vue-cli@3.0 外掛系統簡析Vue
- c#實現最簡單的socket通訊C#
- C# WebSocket的簡單使用【使用Fleck實現】C#Web
- MybatisPlus的分頁外掛簡單使用MyBatis
- C# 簡單反射實現winform左側樹形導航,右側切換內容C#反射ORM
- GFS(谷歌檔案系統)的JAVA簡單實現谷歌Java
- SimpleAISearch:C# + DuckDuckGo 實現簡單的AI搜尋AIC#Go
- c#實現簡單的俄羅斯方塊C#
- C# 反射 + Quartz,實現流程處理C#反射quartz
- 編寫一個簡單的babel外掛Babel
- C#實現的簡單的隨機抽號器C#隨機
- Lumen/Laravel 整合 GatewayWorker (Workerman),實現簡單的聊天系統.LaravelGateway
- 基於Netty的Android系統IM簡單實現原理NettyAndroid
- 使用簡單的Java程式碼實現酒店管理系統Java
- UITabBarController移除系統自帶UITabBarButton簡單實現UItabBarController
- wordpress外掛開發03-簡單的all in one seo 外掛開發
- jQuery簡單實用的響應式固定側邊欄外掛jQuery
- G6的外掛系統
- ue編輯舊版本的外掛,簡單可用。
- 【型別轉換】使用c#實現簡易的型別轉換(Emit,Expression,反射)型別C#MITExpress反射
- 翻譯 Tim Rose 的kibana外掛教程-簡單視覺化外掛ROS視覺化
- 設計模式-C#實現簡單工廠模式設計模式C#
- 【C#入門超簡單】簡單的專案實踐C#