public static IWebPageLocator CreateLocator(string extension)
        {
            IWebPageLocator locator = WebPagesConfiguration.Global.PageConfig.GetPageLocator(extension); //优先从配置中读取

            if (locator != null)
            {
                return(locator);
            }


            if (_locators.TryGetValue(extension, out locator))
            {
                return(locator);
            }

            //由于是静态方法,要保证线程安全,所以锁定,再读取
            lock (_locators)
            {
                if (_locators.TryGetValue(extension, out locator))
                {
                    return(locator);
                }
            }
            return(WebPageTypeLocatorEmpty.Instance);
        }
        public IAspect[] CreateAspects(WebPageContext context)
        {
            IWebPageLocator locator = WebPageLocatorFactory.CreateLocator(context.PathExtension);
            var             aspects = locator.GetAspects(context.VirtualPath);

            if (aspects == null)
            {
                if (!context.IsValidPath())
                {
                    //如果既没有后台文件,也没有前台文件,那么资源不存在
                    throw new HttpException(404, string.Format(Strings.RequestResourceNotExist, context.VirtualPath));
                }
                aspects = locator.GetDefaultAspects(); //如果有前台文件那么用默认的处理
            }
            return(aspects);
        }
 /// <summary>
 /// 注册页面类型定位器,请保证<paramref name="locator"/>是单例的
 /// </summary>
 /// <param name="locator"></param>
 public static void RegisterLocator(string extension, IWebPageLocator locator)
 {
     if (!_locators.ContainsKey(extension))
     {
         lock (_locators)
         {
             if (!_locators.ContainsKey(extension))
             {
                 if (extension.StartsWith("."))
                 {
                     extension = extension.Substring(1);
                 }
                 _locators.Add(extension, locator);
                 _locators.Add(string.Format(".{0}", extension), locator);
             }
         }
     }
 }
        private static WebPage CreatePage(WebPageContext context)
        {
            IWebPageLocator locator = WebPageLocatorFactory.CreateLocator(context.PathExtension);
            IHttpHandler    handler = locator.GetHandler(context.VirtualPath);//利用资源定位器得到资源的Handler类型

            if (handler == null)
            {
                if (!context.IsValidPath())
                {
                    //如果既没有后台文件,也没有前台文件,那么资源不存在
                    throw new HttpException(404, string.Format(Strings.RequestResourceNotExist, context.VirtualPath));
                }
                handler = locator.GetDefaultHandler(); //如果有前台文件那么用默认的处理
            }
            WebPage page = handler as WebPage;

            if (page == null)
            {
                throw new TypeMismatchException(handler.GetType(), typeof(WebPage));
            }
            return(page);
        }