我需要从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>(),
};
}
但似乎我甚至不能使用OrchardSuppressDependency覆盖IShellContextFactory,至少是出于安装目的。
如何在不更改CMS代码的情况下实现所需结果?
Orchard版本是1.8.1。
答案 0 :(得分:0)
所以,这并不完全是我想要实现的目标,但它是一种东西。要覆盖在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来源。