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源代码如此实现一定有其考虑,这个需要继续研究。
最后附上一张函数调用图,以便理解,仅供参考。图片较大,点击可看原图。
您可能感兴趣的文章: