zoukankan      html  css  js  c++  java
  • ActionInvoker-将复杂的方法调用抽象出来

    在看MVC框架源码时,因为Action调用需要获取参数的ModelBinder,绑定参数,过程复杂。所以将Action调用抽象出来。

    IActionInvoker:

        public interface IActionInvoker
        {
            void InvokeAction(ControllerContext controllerContext, string actionName);
        }

    ControllerActionInvoker:

    public class ControllerActionInvoker : IActionInvoker
        {
            public IModelBinder ModelBinder { get; private set; }
    
            public ControllerActionInvoker()
            {
                this.ModelBinder = new DefaultModelBinder();
            }
    
            public void InvokeAction(ControllerContext controllerContext,string actionName)
            {
                MethodInfo method = controllerContext.Controller.GetType().GetMethods().First(m => string.Compare(actionName, m.Name, true) == 0);
                List<object> parameters = new List<object>();
                foreach (ParameterInfo parameter in method.GetParameters())
                {
                    parameters.Add(this.ModelBinder.BindModel(controllerContext,
                        parameter.Name, parameter.ParameterType));
                }
                ActionResult actionResult = method.Invoke(controllerContext.Controller,parameters.ToArray()) as ActionResult;
                actionResult.ExecuteResult(controllerContext);
            }
        }
  • 相关阅读:
    提示“此Flash Player与您的地区不相容,请重新安装Flash”的解决办法
    python中安装并使用redis
    linux安装flash player来播放视频
    安装redis
    centos6.5安装无线网卡驱动并配置wifi
    centos安装java的jdk
    001-python简介
    源码
    进程间通信之综述
    图的概念
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12955032.html
Copyright © 2011-2022 走看看