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); }