ASP.NET MVC:Filter和Action的执行介绍(4)


public object Execute(ControllerBase controller, object[] parameters) {
return _executor(controller, parameters);
}


此处的_executor是
delegate object ActionExecutor(ControllerBase controller, object[] parameters);_exectuor被赋值是通过一个方法,利用Expression拼出方法体、参数,代码在(ActionMethodDispatcher.cs):
static ActionExecutor GetExecutor(MethodInfo methodInfo)此处就不贴出了,比较复杂。这里让我比较费解的是,既然MethodInfo和parameters都有了,直接用反射就可以了,为什么还要如此复杂,我将上面的Execute方法改为:

复制代码 代码如下:


public object Execute(ControllerBase controller, object[] parameters) {
return MethodInfo.Invoke(controller, parameters);
//return _executor(controller, parameters);
}


运行结果是完全一样的。我相信mvc源代码如此实现一定有其考虑,这个需要继续研究。
最后附上一张函数调用图,以便理解,仅供参考。图片较大,点击可看原图。

BeginProcessRequest


您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjdxxf.html