覆盖 Orchard CMS 中的 Orchard 设置视图

Override Orchard Setup view in Orchard CMS

我需要从 Orchard.Setup 模块扩展 SetupViewModel 以添加一些特定于我的 Web 应用程序的选项,以便它们与标准管理员用户名等一起显示在 "Welcome to Orchard" 设置屏幕上. 我已经使用 SetupController 和扩展视图模型创建了自己的模块,但 Orchard 仍然使用标准 Orchard.Setup 模块。 到目前为止我尝试过但没有运气: 1. OrchardSuppressDependency on Controller 在我的自定义模块中 2. 在我的自定义模块中路由优先级为 101 我发现如果您在 ShellContextFactory CreateSetupContext 方法中更改 ShallFeature 名称,您可以轻松地使用自己的模块进行设置:

public ShellContext CreateSetupContext(ShellSettings settings) {
        Logger.Debug("No shell settings available. Creating shell context for setup");

        var descriptor = new ShellDescriptor {
            SerialNumber = -1,
            Features = new[] {
                new ShellFeature { Name = "YOUR_MODULE_NAME" },
                new ShellFeature { Name = "Shapes" },
                new ShellFeature { Name = "Orchard.jQuery" },
            },
        };

        var blueprint = _compositionStrategy.Compose(settings, descriptor);
        var shellScope = _shellContainerFactory.CreateContainer(settings, blueprint);

        return new ShellContext {
            Settings = settings,
            Descriptor = descriptor,
            Blueprint = blueprint,
            LifetimeScope = shellScope,
            Shell = shellScope.Resolve<IOrchardShell>(),
        };
    }

但似乎我无法覆盖 IShellContextFactory,即使使用 OrchardSuppressDependency 至少出于设置目的也是如此。

关于如何在不更改 CMS 代码的情况下实现预期结果的任何想法?

Orchard 版本为 1.8.1。

所以,这不完全是我想要达到的目标,但它确实是某种东西。要覆盖在 Orachard 设置过程中使用的 IShellContextFactory,您可以使用 Host.config 文件。 示例:

   <autofac>
        <components>
            <component instance-scope="single-instance" type="YourModuleNamespace.ShellBuilders.CustomContextFactory, YourModuleName" service="Orchard.Environment.ShellBuilders.IShellContextFactory, Orchard.Framework" />
        </components>
   </autofac>

至少您不必更改 Orchard 源。