/// <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);
        }
Exemple #2
0
        /// <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));
        }