C# 通过反射实现类似MVC路由的机制_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C# 通过反射实现类似MVC路由的机制

C# 通过反射实现类似MVC路由的机制

 2014/8/20 12:07:58  菜鸟无名  程序员俱乐部  我要评论(0)
  • 摘要:最近封装了个功能非常类似于MVC的路由。//MVC路由机制先找到ControllerAction什么是反射反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。实现思路先是根据DLL名称进行装载
  • 标签:MVC C# 实现 反射

  最近封装了个功能非常类似于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 

发表评论
用户名: 匿名