Example #1
0
        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);
        }
Example #2
0
        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);
        }