最近封裝了個功能非常類似於MVC的路由。//MVC路由機制先找到Controller Action
- 什么是反射
反射(Reflection)是.NET中的重要機制,通過放射,可以在運行時獲 得.NET中每一個類型(包括類、結構、委托、接口和枚舉等)的成員,包括方法、屬性、事件,以及構造函數等。還可以獲得每個成員的名稱、限定符和參數 等。有了反射,即可對每一個類型了如指掌。如果獲得了構造函數的信息,即可直接創建對象,即使這個對象的類型在編譯時還不知道。
- 實現思路
先是根據DLL名稱進行裝載,然后反射根據類型查找類,在根據方法名查找方法。可能作者才疏學淺寫的不是很好,希望大家可以多多指出。幫助我提升。
以下代碼
1 //獲取程序集名稱 如果配置程序集名稱為空,就使用當前的程序集名稱 2 var assemblyName = ConfigurationManager.AppSettings["asseName"] == null ? Assembly.GetExecutingAssembly().GetName().Name : ConfigurationManager.AppSettings["asseName"].ToString(); 3 var className= "className";//類名 4 var methodName = "methodName";//方法名 5 6 if (string.IsNullOrEmpty(assemblyName)) 7 throw new Exception("程序集名稱不能為空"); 8 if (string.IsNullOrEmpty(className)) 9 throw new Exception("類名不能為空"); 10 11 //反射指定的DLL,並根據類名查找類 類的訪問修飾符一定要是 public 12 Type type = Assembly.Load(assemblyName).GetExportedTypes().FirstOrDefault( 13 o => o.Name.IndexOf(domainResourceIndex, StringComparison.OrdinalIgnoreCase) >= 0); 14 15 if (type != null) 16 { 17 //創建類的實例 18 object obj = (object)Activator.CreateInstance(type); 19 //根據傳入方法名,查找方法 20 MethodInfo pMethod = type.GetMethod(methodName); 21 22 if (pMethod != null) 23 { 24 //執行 25 pMethod.Invoke(obj, new object[] { request, response }); 26 } 27 else 28 { 29 throw new Exception("沒有找到方法"); 30 } 31 } 32 else 33 { 34 throw new Exception("沒有找到類"); 35 }