关于反射机制的理解和Assembly的学习(反射机制二)

程序集;Assembly中包含了可以在 
CLR(Common Language Runtime)中执行的代码。所有的.NET应用程序都是由一个或多个assembly组成的,不论你在创建一个Console,WinForms,WebForms应用程序或者一个类 
库时,实际上你都是在创建assembly。甚至.NET本身也是通过assembly来实现其功能。一个assembly可以由一个或者多个文件组成,简单来说,你可以把assembly理解成一个逻辑上的DLL。每个assembly必须有一个单独的执行入口如DllMain, WinMain, Main等。Assembly也有一套配置(Deploying)和版本控制(Versioning)的机制。和传统的DLL 
等COM组件相比,.NET有着明显的优点(我们将在后面看到),另外它还可以避免一些诸如DLL兼容性等问题的困扰(地狱般的困扰,译者深有体会),并可以大大简化配置上存在的问题。

由于jquery的出现,编写js代码已经变得异常的平民化,同时现在的web也已经是ajax满天飞,哪天你自己写一个web不含ajax的拿不出手

当然,在.net的控件模式开发中一种去控件化开发已经变的变得更加通用:jquery+ajax+ashx 这种方式更加适用于一些小应用的开发,轻量、简单、自由

由于那时候太年轻,刚刚开始这种模式开发的时候 是一个ajax请求一个ashx页面,这样的结果可想而知,一个小的权限系统光光ashx文件就几十个了,而且文件名还大同小异,悲剧。

后来做了一会儿变聪明了,把相同类别的请求都放到一个ashx文件中,每个请求传一个请求标志 通过switch来调用相应的请求方法,当然,这样要比原来好多了,至少没那么多ashx文件了,但是 每新建一个文件都要去添加switch方法,蛋疼啊 有木有,更加可耻的是 每次增删改一个请求都要去修改那个可恶的switch语句,烦啊

后来知道了反射,知道可以用反射来动态调用方法,脑子一转,哇 好主意,查了相关资料,没几分钟就把这个框架写了出来,然后百度一搜,次奥,关于这种的都有那么多文章了,本来都不想再写这篇文章,重复造轮子啊 要被骂的有木有,不过想想代码都写了,而且还是自己写的,写篇文章纪念一下,而且这个东西感觉比网上的更加方便,实用,嘿嘿。

下面就是这个handler主心骨鸡类的详解了

首先在这个鸡类中定义几个默认的参数

  主要是定义默认的请求方式 GET或者POST 当然默认是POST,相对安全点嘛,并且个人用的也多,当然这个请求方式在子类中可以把它改掉呢

还有就是请求的返回头,方法名称的参数 代码的注释里面都写得很清楚呢

下面就是动态调用方法的核心代码啦(再这里给个反射连接的相关知识,不知道的点我哦

?
//根据指定的请求类型获取方法名
string action = this ._httpReuqest[ this ._actionName];
if (! string .IsNullOrEmpty(action))
{
//获取方法的实例 非静态 需要Public访问权限 忽略大小写
MethodInfo methodInfo = this .GetType().GetMethod(action, BindingFlags.Instance|BindingFlags.Public|BindingFlags.IgnoreCase);
if (methodInfo != null )
{
//调用方法
methodInfo.Invoke( this , null );
}
else
{
throw new ApplicationException( string .Format( "没有找到方法{0}" , action));
}
}
else
{
throw new ArgumentNullException( "没有找到调用方法参数或者方法名为空" );
}

  核心代码够简单把 其实最核心的就是获取方法实例,当然该方法,两句啦 方便吧

我们看看这个获取方法实例的代码

主要是获取类中的非静态,公开访问,忽略名称大小写的方法,当然你如果不放心 其他的方法也被ajax跨域调用了,你可以给该方法的访问权限设为private或者protected 如果你还是不放心的话 可以喝其他的一样 自定义一个Attribute特征加在方法头上,不过个人在这里感觉没啥必要了

核心的都给你们看了 那来看下鸡类的全部代码吧

够简单把,然后写几个测试ashx页面继承该基类就可以啦

  下面来个post类型的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值