/// <summary>
        /// 根据一个Action的调用信息(类名与方法名),返回内部表示的调用信息。
        /// </summary>
        /// <param name="pair"></param>
        /// <returns></returns>
        public static InvokeInfo GetActionInvokeInfo(ControllerActionPair pair, HttpRequest request)
        {
            if (pair == null)
            {
                throw new ArgumentNullException("pair");
            }

            InvokeInfo vkInfo = new InvokeInfo();

            vkInfo.Controller = GetServiceController(pair.Controller);
            if (vkInfo.Controller == null)
            {
                return(null);
            }

            vkInfo.Action = GetServiceAction(vkInfo.Controller.ControllerType, pair.Action, request);
            if (vkInfo.Action == null)
            {
                return(null);
            }

            if (vkInfo.Action.MethodInfo.IsStatic == false)
            {
                //vkInfo.Instance = Activator.CreateInstance(vkInfo.Controller.ControllerType);
                vkInfo.Instance = vkInfo.Controller.ControllerType.FastNew();
            }

            return(vkInfo);
        }
        /// <summary>
        /// 根据一个页面请求路径,返回内部表示的调用信息。
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static InvokeInfo GetActionInvokeInfo(string url)
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentNullException("url");
            }

            MatchActionDescription md     = null;
            ActionDescription      action = null;

            // 先直接用URL从字典中查找匹配项。
            if (s_PageActionDict.TryGetValue(url, out action) == false)
            {
                // 如果不能直接匹配URL,就用正则表达式再逐个匹配。
                md = GetActionUsingRegex(url);
                if (md == null)
                {
                    return(null);
                }
                else
                {
                    action = md.ActionDescription;
                }
            }

            InvokeInfo vkInfo = new InvokeInfo();

            vkInfo.Controller = action.PageController;
            vkInfo.Action     = action;

            if (md != null)
            {
                vkInfo.RegexMatch = md.Match;
            }

            if (vkInfo.Action.MethodInfo.IsStatic == false)
            {
                //vkInfo.Instance = Activator.CreateInstance(vkInfo.Controller.ControllerType);
                vkInfo.Instance = vkInfo.Controller.ControllerType.FastNew();
            }

            return(vkInfo);
        }