/// <summary>创建实例。Start和Layout会调用这里</summary> /// <param name="virtualPath"></param> /// <returns></returns> public Object CreateInstance(String virtualPath) { virtualPath = EnsureVirtualPathPrefix(virtualPath); // 两个条件任意一个满足即可使用物理文件 // 如果不要求取代物理文件,并且虚拟文件存在,则使用物理文件创建 if (!PreemptPhysicalFiles && VirtualPathProvider.FileExists(virtualPath)) { return(BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(WebPageRenderingBase))); } // 如果使用较新的物理文件,且物理文件的确较新,则使用物理文件创建 if (UsePhysicalViewsIfNewer && IsPhysicalFileNewer(virtualPath)) { return(BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(WebViewPage))); } // 最后使用内嵌类创建 Type type; if (_mappings.TryGetValue(virtualPath, out type)) { return(ViewPageActivator.Create(null, type)); } return(null); }
/// <summary>创建实例。Start和Layout会调用这里</summary> /// <param name="virtualPath"></param> /// <returns></returns> public Object CreateInstance(String virtualPath) { ViewMapping viewMapping; // 如果没有该映射,则直接返回空 if (!_mappings.TryGetValue(virtualPath, out viewMapping)) { return(null); } var asm = viewMapping.ViewAssembly; // 两个条件任意一个满足即可使用物理文件 // 如果不要求取代物理文件,并且虚拟文件存在,则使用物理文件创建 if (!asm.PreemptPhysicalFiles && VirtualPathProvider.FileExists(virtualPath)) { return(BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(WebPageRenderingBase))); } // 如果使用较新的物理文件,且物理文件的确较新,则使用物理文件创建 if (asm.UsePhysicalViewsIfNewer && asm.IsPhysicalFileNewer(virtualPath)) { return(BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(WebViewPage))); } // 最后使用内嵌类创建 return(ViewPageActivator.Create(null, viewMapping.Type)); }