1. 程式人生 > >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