public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters) {
            var areaFormats = new[] {
                                        "~/Core/{2}/Views/{1}/{0}.cshtml",
                                        "~/Modules/{2}/Views/{1}/{0}.cshtml",
                                        "~/Themes/{2}/Views/{1}/{0}.cshtml",
                                    };

            //Logger.Debug("AreaFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", areaFormats));

            var universalFormats = parameters.VirtualPaths
                .SelectMany(x => new[] {
                                           x + "/Views/{0}.cshtml",
                                       })
                .ToArray();

            //Logger.Debug("UniversalFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", universalFormats));

            var viewEngine = new RazorViewEngine {
                MasterLocationFormats = DisabledFormats,
                ViewLocationFormats = universalFormats,
                PartialViewLocationFormats = universalFormats,
                AreaMasterLocationFormats = DisabledFormats,
                AreaViewLocationFormats = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return viewEngine;
        }
Пример #2
0
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters)
        {
            var areaFormats = new[] {
                "~/Core/{2}/Views/{1}/{0}.cshtml",
                "~/Modules/{2}/Views/{1}/{0}.cshtml",
                "~/Themes/{2}/Views/{1}/{0}.cshtml",
            };

            //Logger.Debug("AreaFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", areaFormats));

            var universalFormats = parameters.VirtualPaths
                                   .SelectMany(x => new[] {
                x + "/Views/{0}.cshtml",
            })
                                   .ToArray();

            //Logger.Debug("UniversalFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", universalFormats));

            var viewEngine = new RazorViewEngine {
                MasterLocationFormats          = DisabledFormats,
                ViewLocationFormats            = universalFormats,
                PartialViewLocationFormats     = universalFormats,
                AreaMasterLocationFormats      = DisabledFormats,
                AreaViewLocationFormats        = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return(viewEngine);
        }
Пример #3
0
        private IViewEngine DeepEngines(ExtensionDescriptor theme)
        {
            return(_configuredEnginesCache.BindDeepEngines(theme.Id, () => {
                // The order for searching for views is:
                // 1. Current "theme"
                // 2. Base themes of the current theme (in "base" order)
                // 3. Active features from modules in dependency order

                var engines = Enumerable.Empty <IViewEngine>();
                // 1. current theme
                engines = engines.Concat(CreateThemeViewEngines(theme));

                // 2. Base themes of the current theme (in "base" order)
                engines = GetBaseThemes(theme).Aggregate(engines, (current, baseTheme) => current.Concat(CreateThemeViewEngines(baseTheme)));

                // 3. Active features from modules in dependency order
                var enabledModules = _extensionManager.EnabledFeatures(_shellDescriptor)
                                     .Reverse() // reverse from (C <= B <= A) to (A => B => C)
                                     .Where(fd => DefaultExtensionTypes.IsModule(fd.Extension.ExtensionType));

                var allLocations = enabledModules.Concat(enabledModules)
                                   .Select(fd => fd.Extension.Location + "/" + fd.Extension.Id)
                                   .Distinct(StringComparer.OrdinalIgnoreCase)
                                   .ToList();

                var moduleParams = new CreateModulesViewEngineParams {
                    VirtualPaths = allLocations
                };
                engines = engines.Concat(_viewEngineProviders.Select(vep => vep.CreateModulesViewEngine(moduleParams)));

                return new ViewEngineCollectionWrapper(engines);
            }));
        }
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters)
        {
            //TBD: It would probably be better to determined the area deterministically from the module of the controller, not by trial and error.
            var areaFormats = parameters.ExtensionLocations.Select(location => location + "/{2}/Views/{1}/{0}.cshtml").ToArray();

            //Logger.Debug("AreaFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", areaFormats));

            var universalFormats = parameters.VirtualPaths
                                   .SelectMany(x => new[] {
                x + "/Views/{0}.cshtml",
            })
                                   .ToArray();

            //Logger.Debug("UniversalFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", universalFormats));

            var viewEngine = new RazorViewEngine
            {
                MasterLocationFormats          = DisabledFormats,
                ViewLocationFormats            = universalFormats,
                PartialViewLocationFormats     = universalFormats,
                AreaMasterLocationFormats      = DisabledFormats,
                AreaViewLocationFormats        = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return(viewEngine);
        }
Пример #5
0
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters)
        {
            var areaFormats = new[]
            {
                "~/Core/{2}/Views/{1}/{0}.liquid",
                "~/Modules/{2}/Views/{1}/{0}.liquid",
                "~/Themes/{2}/Views/{1}/{0}.liquid",
            };

            var universalFormats = parameters.VirtualPaths
                                   .SelectMany(
                x => new[]
            {
                x + "/Views/{0}.liquid",
            })
                                   .ToArray();

            var viewEngine = new LiquidViewEngine(_liquidTemplateServiceWork)
            {
                MasterLocationFormats          = DisabledFormats,
                ViewLocationFormats            = universalFormats,
                PartialViewLocationFormats     = universalFormats,
                AreaMasterLocationFormats      = DisabledFormats,
                AreaViewLocationFormats        = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return(viewEngine);
        }
Пример #6
0
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters) {
            //TBD: It would probably be better to determined the area deterministically from the module of the controller, not by trial and error.
            var areaFormats = parameters.ExtensionLocations.Select(location => location + "/{2}/Views/{1}/{0}.cshtml").ToArray();

            //Logger.Debug("AreaFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", areaFormats));

            var universalFormats = parameters.VirtualPaths
                .SelectMany(x => new[] {
                                           x + "/Views/{0}.cshtml",
                                       })
                .ToArray();

            //Logger.Debug("UniversalFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", universalFormats));

            var viewEngine = new RazorViewEngine {
                MasterLocationFormats = DisabledFormats,
                ViewLocationFormats = universalFormats,
                PartialViewLocationFormats = universalFormats,
                AreaMasterLocationFormats = DisabledFormats,
                AreaViewLocationFormats = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return viewEngine;
        }
Пример #7
0
        private IViewEngine DeepEngines(ExtensionDescriptorEntry theme)
        {
            return(_configuredEnginesCache.BindDeepEngines(theme.Id, () =>
            {
                // 搜索视图顺序:
                // 1. 当前主图
                // 2. 基础主题
                // 3. 来自模块激活功能依赖排序

                var engines = Enumerable.Empty <IViewEngine>();
                // 1. 当前主题
                engines = engines.Concat(CreateThemeViewEngines(theme));

                // 2. 基础主题
                engines = GetBaseThemes(theme).Aggregate(engines, (current, baseTheme) => current.Concat(CreateThemeViewEngines(baseTheme)));

                // 3. 来自模块激活功能依赖排序
                var enabledModules = _extensionManager.EnabledFeatures(_shellDescriptor)
                                     .Reverse() // reverse from (C <= B <= A) to (A => B => C)
                                     .Where(fd => DefaultExtensionTypes.IsModule(fd.Extension.ExtensionType)).ToArray();

                var allLocations = enabledModules.Concat(enabledModules)
                                   .Select(fd => fd.Extension.Location + "/" + fd.Extension.Id)
                                   .Distinct(StringComparer.OrdinalIgnoreCase)
                                   .ToList();

                var moduleParams = new CreateModulesViewEngineParams {
                    VirtualPaths = allLocations
                };
                engines = engines.Concat(_viewEngineProviders.Select(vep => vep.CreateModulesViewEngine(moduleParams)));

                return new ViewEngineCollectionWrapper(engines);
            }));
        }
        /// <summary>
        /// 创建模块视图引擎。
        /// </summary>
        /// <param name="parameters">创建模块视图引擎所需的参数。</param>
        /// <returns>视图引擎。</returns>
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters)
        {
            var areaFormats = new[] {
                                        "~/Core/{2}/Views/{1}/{0}.cshtml",
                                        "~/Modules/{2}/Views/{1}/{0}.cshtml",
                                        "~/Themes/{2}/Views/{1}/{0}.cshtml",
                                    };

            var universalFormats = parameters.VirtualPaths
                .SelectMany(x => new[] {
                                           x + "/Views/{0}.cshtml",
                                       })
                .ToArray();

            var viewEngine = new RazorViewEngine
            {
                MasterLocationFormats = DisabledFormats,
                ViewLocationFormats = universalFormats,
                PartialViewLocationFormats = universalFormats,
                AreaMasterLocationFormats = DisabledFormats,
                AreaViewLocationFormats = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return viewEngine;
        }
Пример #9
0
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters)
        {
            // Below three lines copied from RazorViewEngineProvider. Must revisit if that class changes.
            // TBD: It would probably be better to determined the area deterministically from the module of the controller,
            // not by trial and error.
            var areaFormats = parameters.ExtensionLocations.Select(location => location + "/{2}/Views/{1}/{0}.liquid").ToArray();

            var universalFormats = parameters.VirtualPaths
                                   .SelectMany(
                x => new[]
            {
                x + "/Views/{0}.liquid",
            })
                                   .ToArray();

            var viewEngine = new LiquidViewEngine(_liquidTemplateServiceWork)
            {
                MasterLocationFormats          = DisabledFormats,
                ViewLocationFormats            = universalFormats,
                PartialViewLocationFormats     = universalFormats,
                AreaMasterLocationFormats      = DisabledFormats,
                AreaViewLocationFormats        = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return(viewEngine);
        }
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters)
        {
            var areaFormats = new[] {
                "~/Modules/{2}/Views/{1}/{0}.cshtml",
                "~/Themes/{2}/Views/{1}/{0}.cshtml",
                "~/Views/Shared/{0}.cshtml"
            };

            var universalFormats = parameters.VirtualPaths
                                   .SelectMany(x => new[] {
                x + "/{1}/{0}.cshtml",
                x + "/Shared/{0}.cshtml"
            })
                                   .ToArray();

            var viewEngine = new RazorViewEngine
            {
                MasterLocationFormats          = disabledFormats,
                ViewLocationFormats            = universalFormats,
                PartialViewLocationFormats     = universalFormats,
                AreaMasterLocationFormats      = disabledFormats,
                AreaViewLocationFormats        = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return(viewEngine);
        }
Пример #11
0
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters)
        {
            var areaFormats = new[] {
                "~/Core/{2}/Views/{1}/{0}.cshtml",
                "~/Modules/{2}/Views/{1}/{0}.cshtml"
            };

            //Logger.Debug("AreaFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", areaFormats));
            //基本上不再用了
            //var universalFormats = parameters.VirtualPaths
            //    .SelectMany(x => new[] {
            //                               x + "/Views/{0}.cshtml",
            //                            })
            //    .ToArray();
            var viewFormat = new[] {
                "~/Views/{1}/{0}.cshtml",
                "~/Views/{1}/{0}.cshtml"
            };

            var masterLocationFormat = new[] {
                "~/Views/Shared/{0}.cshtml",
                "~/Views/Shared/{0}.cshtml"
            };

            var areaMasterLocationFormats = new[] {
                "~/Core/{2}/Views/Shared/{0}.cshtml",
                "~/Modules/{2}/Views/Shared/{0}.cshtml"
            }.ToList();


            var partialViewFormats = parameters.VirtualPaths
                                     .SelectMany(x => new[] {
                x + "/Views/Shared/{0}.cshtml",
            }).ToArray();

            ;

            areaMasterLocationFormats.AddRange(parameters.VirtualPaths
                                               .SelectMany(x => new[] {
                x + "/Views/Shared/{0}.cshtml",
            }));



            //Logger.Debug("UniversalFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", universalFormats));
            var viewEngine = new RazorViewEngine
            {
                MasterLocationFormats          = masterLocationFormat,
                ViewLocationFormats            = viewFormat,
                PartialViewLocationFormats     = partialViewFormats,
                AreaMasterLocationFormats      = areaMasterLocationFormats.ToArray(),
                AreaViewLocationFormats        = areaFormats,
                AreaPartialViewLocationFormats = areaFormats,
            };

            return(viewEngine);
        }
Пример #12
0
        public IViewEngine CreateModulesViewEngine(CreateModulesViewEngineParams parameters)
        {
            var areaFormats = new[] {
                                        "~/Core/{2}/Views/{1}/{0}.cshtml",
                                        "~/Modules/{2}/Views/{1}/{0}.cshtml"
                                     };

            //Logger.Debug("AreaFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", areaFormats));
            //基本上不再用了
            //var universalFormats = parameters.VirtualPaths
            //    .SelectMany(x => new[] {
            //                               x + "/Views/{0}.cshtml",
            //                            })
            //    .ToArray();
            var viewFormat = new[] {
                "~/Views/{1}/{0}.cshtml",
                "~/Views/{1}/{0}.cshtml"
            };

            var masterLocationFormat = new[] {
                "~/Views/Shared/{0}.cshtml",
                "~/Views/Shared/{0}.cshtml"
            };

            var areaMasterLocationFormats = new[] {
                   "~/Core/{2}/Views/Shared/{0}.cshtml",
                   "~/Modules/{2}/Views/Shared/{0}.cshtml"
             }.ToList();

            var partialViewFormats = parameters.VirtualPaths
                  .SelectMany(x => new[] {
                                           x + "/Views/Shared/{0}.cshtml",
                                       }).ToArray();
            ;

            areaMasterLocationFormats.AddRange(parameters.VirtualPaths
                  .SelectMany(x => new[] {
                                           x + "/Views/Shared/{0}.cshtml",
                                       }));

            //Logger.Debug("UniversalFormats (module): \r\n\t-{0}", string.Join("\r\n\t-", universalFormats));
            var viewEngine = new RazorViewEngine
               {
               MasterLocationFormats = masterLocationFormat,
               ViewLocationFormats = viewFormat,
               PartialViewLocationFormats = partialViewFormats,
               AreaMasterLocationFormats = areaMasterLocationFormats.ToArray(),
               AreaViewLocationFormats = areaFormats,
               AreaPartialViewLocationFormats = areaFormats,
               };

            return viewEngine;
        }
        private IViewEngine DeepEngines(ExtensionDescriptor theme) {
            return _configuredEnginesCache.BindDeepEngines(theme.Id, () => {
                // The order for searching for views is:
                // 1. Current "theme"
                // 2. Base themes of the current theme (in "base" order)
                // 3. Active features from modules in dependency order

                var engines = Enumerable.Empty<IViewEngine>();
                // 1. current theme
                engines = engines.Concat(CreateThemeViewEngines(theme));

                // 2. Base themes of the current theme (in "base" order)
                engines = GetBaseThemes(theme).Aggregate(engines, (current, baseTheme) => current.Concat(CreateThemeViewEngines(baseTheme)));

                // 3. Active features from modules in dependency order
                var enabledModules = _extensionManager.EnabledFeatures(_shellDescriptor)
                    .Reverse()  // reverse from (C <= B <= A) to (A => B => C)
                    .Where(fd => DefaultExtensionTypes.IsModule(fd.Extension.ExtensionType));

                var allLocations = enabledModules.Concat(enabledModules)
                    .Select(fd => fd.Extension.Location + "/" + fd.Extension.Id)
                    .Distinct(StringComparer.OrdinalIgnoreCase)
                    .ToList();

                var moduleParams = new CreateModulesViewEngineParams { VirtualPaths = allLocations };
                engines = engines.Concat(_viewEngineProviders.Select(vep => vep.CreateModulesViewEngine(moduleParams)));

                return new ViewEngineCollectionWrapper(engines);
            });
        }
Пример #14
0
        private IViewEngine DeepEngines(ExtensionDescriptorEntry theme)
        {
            return _configuredEnginesCache.BindDeepEngines(theme.Id, () =>
            {
                // 搜索视图顺序:
                // 1. 当前主图
                // 2. 基础主题
                // 3. 来自模块激活功能依赖排序

                var engines = Enumerable.Empty<IViewEngine>();
                // 1. 当前主题
                engines = engines.Concat(CreateThemeViewEngines(theme));

                // 2. 基础主题
                engines = GetBaseThemes(theme).Aggregate(engines, (current, baseTheme) => current.Concat(CreateThemeViewEngines(baseTheme)));

                // 3. 来自模块激活功能依赖排序
                var enabledModules = _extensionManager.EnabledFeatures(_shellDescriptor)
                    .Reverse()  // reverse from (C <= B <= A) to (A => B => C)
                    .Where(fd => DefaultExtensionTypes.IsModule(fd.Extension.ExtensionType)).ToArray();

                var allLocations = enabledModules.Concat(enabledModules)
                    .Select(fd => fd.Extension.Location + "/" + fd.Extension.Id)
                    .Distinct(StringComparer.OrdinalIgnoreCase)
                    .ToList();

                var moduleParams = new CreateModulesViewEngineParams { VirtualPaths = allLocations };
                engines = engines.Concat(_viewEngineProviders.Select(vep => vep.CreateModulesViewEngine(moduleParams)));

                return new ViewEngineCollectionWrapper(engines);
            });
        }