最近封裝了個(gè)功能非常類似于MVC的路由。//MVC路由機(jī)制先找到Controller Action
反射(Reflection)是.NET中的重要機(jī)制,通過放射,可以在運(yùn)行時(shí)獲 得.NET中每一個(gè)類型(包括類、結(jié)構(gòu)、委托、接口和枚舉等)的成員,包括方法、屬性、事件,以及構(gòu)造函數(shù)等。還可以獲得每個(gè)成員的名稱、限定符和參數(shù) 等。有了反射,即可對(duì)每一個(gè)類型了如指掌。如果獲得了構(gòu)造函數(shù)的信息,即可直接創(chuàng)建對(duì)象,即使這個(gè)對(duì)象的類型在編譯時(shí)還不知道。
先是根據(jù)DLL名稱進(jìn)行裝載,然后反射根據(jù)類型查找類,在根據(jù)方法名查找方法。可能作者才疏學(xué)淺寫的不是很好,希望大家可以多多指出。幫助我提升。
以下代碼
1 //獲取程序集名稱 如果配置程序集名稱為空,就使用當(dāng)前的程序集名稱 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,并根據(jù)類名查找類 類的訪問修飾符一定要是 public12 Type type = Assembly.Load(assemblyName).GetExportedTypes().FirstOrDefault(13 o => o.Name.IndexOf(domainResourceIndex, StringComparison.OrdinalIgnoreCase) >= 0);14 15 if (type != null)16 {17 //創(chuàng)建類的實(shí)例18 object obj = (object)Activator.CreateInstance(type);19 //根據(jù)傳入方法名,查找方法20 MethodInfo pMethod = type.GetMethod(methodName);21 22 if (pMethod != null)23 {24 //執(zhí)行25 pMethod.Invoke(obj, new object[] { request, response });26 }27 else28 {29 throw new Exception("沒有找到方法");30 }31 }32 else33 {34 throw new Exception("沒有找到類");35 }
轉(zhuǎn)載請(qǐng)注明http://www.companysz.com/cainiaodage/p/3924165.html
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注