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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章