C# 通過反射實現類似MVC路由的機制


  最近封裝了個功能非常類似於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                 }

 

 轉載請注明 http://www.cnblogs.com/cainiaodage/p/3924165.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM