博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 通过反射实现类似MVC路由的机制
阅读量:6679 次
发布时间:2019-06-25

本文共 1940 字,大约阅读时间需要 6 分钟。

  最近封装了个功能非常类似于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,并根据类名查找类 类的访问修饰符一定要是 public12                 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                     else28                     {29                         throw new Exception("没有找到方法");30                     }31                 }32                 else33                 {34                     throw new Exception("没有找到类");35                 }

 

 转载请注明  

转载于:https://www.cnblogs.com/cainiaodage/p/3924165.html

你可能感兴趣的文章
iis下部署网站的步骤与常见问题
查看>>
洛谷 P1464 Function【动态规划(递推)/记忆化搜索(递归)】
查看>>
Python-Django 视图层
查看>>
uC/OS-II中includes块
查看>>
公共DNS推荐及dns测速
查看>>
查询获取所有数据库名及数据库中表的集合、数据库连接字符串(类生成器,暂时支持mysql,sql server,后期有oracle再更新)...
查看>>
spring_5处理数据库
查看>>
SAE 部署 bilibili 爬虫
查看>>
利用千人基因组数据库查看SNP在不同地区、国家、洲的频率及个数
查看>>
[BZOJ3224]普通平衡树
查看>>
sed命令2
查看>>
money 和 smallmoney
查看>>
nginx 301重定向一种实现方法
查看>>
Scramble String
查看>>
LeetCode:Binary Tree Level Order Traversal II (按层遍历)
查看>>
2 虚拟机Oracle11.2.0.4服务器端,第三方图形化界面安装步骤
查看>>
Python全栈开发-Day5-常用模块学习
查看>>
Mac OS下配置PHP Nginx PHP-FPM
查看>>
Linux基础:CentOS安装python3.7
查看>>
Daily Scrum: 2012/11/27
查看>>