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

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

时间: 2024-12-31 03:26:31

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

MVC路由探寻,涉及路由的惯例、自定义片段变量、约束、生成链接和URL等

引子 在了解MVC路由之前,必须了解的概念是"片段".片段是指除主机名和查询字符串以外的.以"/"分隔的各个部分.比如,在http://site.com/Home/Index中,包含2个片段,第一个片段是Home,第二个片段是Index. URL匹配的特点:● 保守的:URL中的片段数量必须和路由规则中的片段数量一致(路由规则没有设置默认值的前提下)● 宽松的:在满足片段数要求的前提下,URL中的片段内容是宽松的 本篇涉及的方面包括:1.路由惯例2.自定义片段变量3

Asp.Net MVC 路由 【转】

原文链接:http://www.asp.net/learn/mvc/ 在这篇教程中,我将为你介绍每个ASP.NET MVC应用程序都具有的一个重要功能,称作ASP.NET路由(ASP.NET Routing).ASP.NET路由模块负责将即将到来的浏览器请求映射到特定的MVC控制器动作.学完这篇教程之后,你将会理解标准的路由表是如何将请求映射到控制器动作的. 1. 理解默认路由表 当你创建一个新的ASP.NET MVC应用程序时,应用程序已经被配置为使用ASP.NET路由.ASP.NET路由在两

学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(一)

2.2ASP.NET MVC路由 ASP.NET的路由系统旨在通过注册路由模板与物理文件路径之间的映射进而实现请求地址与文件路径之间的分离,但对于ASP.NET MVC应用来说,请求的目标不再是一个具体的物理文件,而是定义在某个Controller类型中的Action方法.出于自身路由特点的需要,ASP.NET MVC对ASP.NET路由系统进行了相应的扩展. 2.2.1路由映射 通过前面的介绍我们知道,RouteTable的静态属性Routes返回的RouteCollection对象代表了针对

ASP.NET Core中使用默认MVC路由

ASP.NET Core里Route这块的改动不大,只是一些用法上有了调整,提供了一些更加简洁的语法. 而对于自定义路由的支持当然也是没有问题的,这个功能应该是从MVC1.0版本就已经有这个功能. 先看看ASP.NET Core里面实现默认MVC路由的配置方式 通常情况下,在使用MVC项目的时候,默认的路由就足够了,就是常见的通过Controller和Action获取具体的方法的方式. 从一个最基本的项目开始,执行以下步骤,就可以使得项目支持MVC路由 1.创建一个空白的ASP.NET Core

[Buffalo]ASP.NET MVC路由映射

Asp.Net的路由系统旨在通过注册URl模版与物理文件之间的映射进而实现请求地址与文件路径之间的分离,但对于Asp.Net Mvc应用来说,请求的目标却是定义在某个Controller类型中的Action方法. 为了实现针对目标Controller和Action的路由,Asp.Net Mvc在System.Web.Mvc.RouteCollectionExtensions中针对RouteConllection类型定义了一系列的扩展方法以实现文件路径无关的路由映射.其中的两组方法,Ignore用

ASP.NET MVC - 路由系统

ASP.NET MVC的请求URL不再对应于传统ASP.NET程序的ASPX文件物理地址,而是把请求映射到一个控制器(Controller)类的方法(Action)上,Controller.Action再加上参数构成ASP.Net MVC请求的Url.下面我们来看下路由系统的主要对象. UrlRoutingModule ASP.NET MVC框架的路由实质是从传统ASP.NET管道扩展HttpModule而来,这个模块正是UrlRoutingModule.通过反编译可以看到UrlRoutingM

MVC路由中的一个问题

最近项目在使用MVC. 项目中有个地址为:www.xxx.com/search/search.html,从这个页面点击QQ登录时,地址为:www.xxx.com/passport/QQLogin.html?returl=/search/search.html 此时,QQ登录总是不成功. 但是同样的情况,如果把页面换成www.xxx.com/search/s.html,从这个页面点击QQ登录时,地址为:www.xxx.com/passport/QQLogin.html?returl=/search

MVC路由自定义及视图找寻规则

这篇关于MVC路由及视图规则本来是昨天要发的,但是本人真的有点懒,终于今天忍无可忍了.初学MVC的时候比现在还菜一点(现在也很菜),想着会用就行,但是有时还是会好奇,为什么它能找到控制器?为什么控制器return View();就能找到视图,而为什么视图一定要建在Views文件下?好像说的有点多了,接下来一边上例子,一边分析! MVC路由自定义 相信对于MVC路由的配置大家也都了解过一些,其实,这也不是本章的重点. 创建MVC项目的时候,根目录下>>App_Start>>Route

ASP.NET MVC路由系统的核心对象介绍

众所周知,ASP.NET MVC有一套自己的路由系统.这套路由系统是在原来的ASP.NET 路由系统上扩展过来的.今天这篇文章就来聊聊MVC路由系统中非常关键的一些对象. ASP.NET MVC路由系统主要由以下几个核心对象:         1.RouteCollection(RouteCollextionExtentions)         2.RouteTable         3.RouteData         4.Route:RouteBase         5.URLRou