程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#反射實現簡單的插件系統

C#反射實現簡單的插件系統

編輯:C#入門知識

如果用過一些優秀的開源或是非開源的應用軟件,就會發現這些軟件的一個很大的優勢就是其開放性,任何有能力的人都可以為其開發不同的插件來增強其的功能。比如著名的foobar2000,Vim和TotalCommander等等。

C#的反射可以用來實現一個簡單的插件系統。思路很簡單,我們創建一個解決方案,包含三個工程,一個為我們的軟件MyApplication,一個為插件接口IPlugin,一個為具體的插件MyPlugin。插件系統的基本思路是我們用一個接口類庫,來定義我們軟件可以使用的插件必須實現的方法簽名。然後我們的軟件MyApplication通過引用該IPlugin dll來動態調用,而具體的實現插件MyPlugin則引用該接口來實現具體的方法。這樣我們的應用程序就能在不知道具體插件的情況下調用插件了。。

結構圖如下:

Myapplication

關鍵代碼也就是通過對程序集載入。搜索到對應接口的實現類。然後調用即可。

           
  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());                         }                     }                 }

 

運行結果:

QQ截圖20130220200408

源碼下載:PluginSystem.zip

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved