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