private object[] GetActionParameters() { ActionDescription action = this.InvokeInfo.Action; if (action.Parameters == null || action.Parameters.Length == 0) { return(null); } IActionParametersProvider provider = ActionParametersProviderFactory.Instance.CreateProvider(this.HttpContext); object[] parameters = null; IActionParametersProvider2 p2 = provider as IActionParametersProvider2; if (p2 != null) // 优先使用内部接口版本 { parameters = p2.GetParameters(this.HttpContext, action); } else { parameters = provider.GetParameters(this.HttpContext, action.MethodInfo); } EventHandler <GetActionParametersEventArgs> eventHandler = this.OnGetActionParameters; if (eventHandler != null) { GetActionParametersEventArgs e = new GetActionParametersEventArgs { HttpContext = this.HttpContext, ActionMethod = this.InvokeInfo.Action.MethodInfo, Parameters = parameters }; eventHandler(this, e); return(e.Parameters); } return(parameters); }
private object[] ExecuteObtainParameters() { ActionDescription action = this.InvokeInfo.Action; if (action.Parameters == null || action.Parameters.Length == 0) { return(null); } // 从工厂中获取一个能够构造Action参数的提供者实例。 IActionParametersProvider provider = ActionParametersProviderFactory.Instance.CreateProvider(this.HttpContext); object[] parameters = null; // 优先使用内部接口版本 IActionParametersProvider2 p2 = provider as IActionParametersProvider2; if (p2 != null) { parameters = p2.GetParameters(this.HttpContext, action); } else { parameters = provider.GetParameters(this.HttpContext, action.MethodInfo); } // 引发事件,允许在外部修改获取到的事件参数,可修改数组中元素,但数组本身不允许重新指定。 EventHandler <EndObtainParametersEventArgs> eventHandler = this.EndObtainParameters; if (eventHandler != null) { EndObtainParametersEventArgs e = CreateEventArgs <EndObtainParametersEventArgs>(); e.Parameters = parameters; // 调用外部的事件处理器 eventHandler(this, e); } return(parameters); }