使用反映(Reflection)讀取組件的資訊

續前一篇 Two-tier 架構改變成 three-tier,確定實作方法後,評估實作的工作量可不小,針對一個既有的資料處理類別,得對應寫出:

1. 新增一個 Interface

2. 新增一個 Proxy 類別,實作上面的 Interface

3. 新增一個 Web Service

而這些撰碼的過程,大部份都是 Copy-Paste 動作 或 很機械式的修改

筆者想到透過 Reflection 讀取原本的資料處理類別,就可以分別產生另外三組程式碼。

讀取單一組件取得公開方法,如下:

 

private static void GenCodeByDllFile(string dllname)
        {
            string dllFileName = string.Format("{0}\\{1}", System.Windows.Forms.Application.StartupPath, dllname);
            System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(dllFileName);

            //讀取所有類別
            foreach (Type t in assembly.GetTypes())
            {
                string tName = t.ToString();
                object obj = assembly.CreateInstance(tName);
                //讀取所有方法
                foreach (MethodInfo m in obj.GetType().GetMethods())
                {
                    //讀取參數
                    ParameterInfo[] ps = m.GetParameters();

                    //TODO 輸出程式

                }
            }
        }

 

程式碼範例:http://files.dotblogs.com.tw/robin/1303/20133810267568.zip