예제 #1
0
        /// <summary>
        /// Gets a view engine that is a clone of the given <paramref name="viewEngine"/> and has enhanced search locations.
        /// </summary>
        /// <param name="viewEngine">The view engine.</param>
        /// <param name="controller">The controller.</param>
        /// <param name="pathTransformations">Transformations that have to be applied to each view engine search path.</param>
        private static IViewEngine GetViewEngine(VirtualPathProviderViewEngine viewEngine, Controller controller, IList <Func <string, string> > pathTransformations)
        {
            var newEngine = (VirtualPathProviderViewEngine)Activator.CreateInstance(viewEngine.GetType());

            newEngine.AreaViewLocationFormats        = ControllerExtensions.AppendControllerVirtualPath(viewEngine.AreaViewLocationFormats, pathTransformations);
            newEngine.AreaMasterLocationFormats      = ControllerExtensions.AppendControllerVirtualPath(viewEngine.AreaPartialViewLocationFormats, pathTransformations);
            newEngine.AreaPartialViewLocationFormats = ControllerExtensions.AppendControllerVirtualPath(viewEngine.AreaPartialViewLocationFormats, pathTransformations);
            newEngine.ViewLocationFormats            = ControllerExtensions.AppendControllerVirtualPath(viewEngine.ViewLocationFormats, pathTransformations);
            newEngine.MasterLocationFormats          = ControllerExtensions.AppendControllerVirtualPath(viewEngine.MasterLocationFormats, pathTransformations);
            newEngine.PartialViewLocationFormats     = ControllerExtensions.AppendControllerVirtualPath(viewEngine.PartialViewLocationFormats, pathTransformations);

            return(newEngine);
        }
        private static IViewEngine GetViewEngine(VirtualPathProviderViewEngine viewEngine, IList <Func <string, string> > pathTransformations)
        {
            VirtualPathProviderViewEngine newEngine;
            var precompiledEngine = viewEngine as CompositePrecompiledMvcEngineWrapper;

            if (precompiledEngine != null)
            {
                if (!precompiledEngine.PackageName.IsNullOrEmpty() &&
                    !string.Equals(precompiledEngine.PackageName, new PackageManager().GetCurrentPackage(), StringComparison.OrdinalIgnoreCase))
                {
                    return(null);
                }

                newEngine = precompiledEngine.Clone();
            }
            else
            {
                var viewEngineType = viewEngine.GetType();
                var defaultCtor    = viewEngineType.GetConstructor(Type.EmptyTypes);
                if (defaultCtor != null)
                {
                    newEngine = (VirtualPathProviderViewEngine)Activator.CreateInstance(viewEngineType);
                }
                else
                {
                    return(null);
                }
            }

            newEngine.ViewLocationCache = DefaultViewLocationCache.Null;

            newEngine.AreaViewLocationFormats        = ControllerExtensions.AppendControllerVirtualPath(viewEngine.AreaViewLocationFormats, pathTransformations);
            newEngine.AreaMasterLocationFormats      = ControllerExtensions.AppendControllerVirtualPath(viewEngine.AreaPartialViewLocationFormats, pathTransformations);
            newEngine.AreaPartialViewLocationFormats = ControllerExtensions.AppendControllerVirtualPath(viewEngine.AreaPartialViewLocationFormats, pathTransformations);
            newEngine.ViewLocationFormats            = ControllerExtensions.AppendControllerVirtualPath(viewEngine.ViewLocationFormats, pathTransformations);
            newEngine.MasterLocationFormats          = ControllerExtensions.AppendControllerVirtualPath(viewEngine.MasterLocationFormats, pathTransformations);
            newEngine.PartialViewLocationFormats     = ControllerExtensions.AppendControllerVirtualPath(viewEngine.PartialViewLocationFormats, pathTransformations);

            if (precompiledEngine != null)
            {
                newEngine.AreaViewLocationFormats        = newEngine.AreaViewLocationFormats.Select(p => FrontendManager.VirtualPathBuilder.RemoveParams(p)).ToArray();
                newEngine.AreaMasterLocationFormats      = newEngine.AreaMasterLocationFormats.Select(p => FrontendManager.VirtualPathBuilder.RemoveParams(p)).ToArray();
                newEngine.AreaPartialViewLocationFormats = newEngine.AreaPartialViewLocationFormats.Select(p => FrontendManager.VirtualPathBuilder.RemoveParams(p)).ToArray();
                newEngine.ViewLocationFormats            = newEngine.ViewLocationFormats.Select(p => FrontendManager.VirtualPathBuilder.RemoveParams(p)).ToArray();
                newEngine.MasterLocationFormats          = newEngine.MasterLocationFormats.Select(p => FrontendManager.VirtualPathBuilder.RemoveParams(p)).ToArray();
                newEngine.PartialViewLocationFormats     = newEngine.PartialViewLocationFormats.Select(p => FrontendManager.VirtualPathBuilder.RemoveParams(p)).ToArray();
            }

            return(newEngine);
        }