Orchard Core使用IShellConfiguration扩展了ASP.NET Core IConfiguration,以允许在应用程序范围的配置之上进行特定于租户的配置。虽然本文档使用OrchardCore.Cms.Web.csproj示例中Web应用程序的配置,但如果您在自己的Web应用程序中使用NuGet包中的Orchard,那么在项目中也可以使用Orchard。

配置资源

Orchard Core支持配置源层次结构。

1、ASP.NET Core项目的启动项,例如OrchardCore.Cms.Web.csproj、appsettings.json或根据环境appsettings.Development.json。
2、全局租户配置App_data/appsettings.json,或根据环境App_data/appsettings.Development.json。
3、位于App_Data/Sites/{Tenant_Name}/appsettings.json文件夹中每个租户文件夹下的各个租户配置文件。注意:这些是可变文件,不支持环境版本。
4、环境变量,或通过Azure将AppSettings作为环境变量。
配置源按上述顺序加载,层次结构中较低的设置将覆盖较高配置的值,例如:全局租户值将始终被环境变量覆盖。

下面appsettings.json示例中的IShellConfiguration模式仅适用于专门支持此类配置的模块。您可以查看给定模块的代码或文档,看看情况是否如此。
OrchardCore.Cms.Web.csproj启动项目中的IShellConfiguration。
Orchard Core将所有配置数据存储在appsettings.json文件中的OrchardCore部分下:

{
"OrchardCore": {
... module configurations ...
}
}

每个Orchard Core模块在OrchardCore部分下都有自己的配置部分:

{
"OrchardCore": {
"OrchardCore.Media": {
... individual module configuration ...
}
}
}

有关更多示例,请参见appsettings.json文件。

租户的预配置说明

要在创建租户之前预先配置租户的设置值,可以指定一个以租户命名的部分,其State值为Uninitialized

{
"OrchardCore": {
"MyTenant": {
"State": "Uninitialized",
"RequestUrlPrefix": "mytenant",
"ConnectionString": "...",
"DatabaseProvider": "SqlConnection"
}
}
}

然后,预配置的租户将出现在管理员的租户列表中,这些值将在设置租户时使用。

租户建立后配置说明

要在创建租户后配置租户的值,您可以指定一个以租户命名的部分,而不必提供状态值。

{
"OrchardCore": {
"Default": {
"OrchardCore_Media": {
... specific tenant configuration ...
}
}
}
}

全局租户数据访问配置

如果您希望所有租户都访问同一数据库,该怎么办?对应的配置可以保存在一个地方,而不是逐个为所有租户设置相同的连接字符串,如下所示:

{
"OrchardCore": {
"ConnectionString": "...",
"DatabaseProvider": "SqlConnection",
"Default" : {
"State": "Uninitialized",
"TablePrefix": "Default"
}
}
}

请注意,尽管您可以对租户使用相同的配置键(如前所述),但这是在OrchardCore部分的根目录中。
为所有租户使用的数据库添加连接字符串。
DatabaseProvider应与使用的数据库引擎相对应,示例为SQL Server。
需要将TablePrefix配置为默认租户使用的前缀,以便可以为每个租户分隔表(否则,只有默认租户的表会缺少前缀)。然后,应为其他租户设置不同的前缀。
这样,通过在给定环境中配置相应数据库的设置,应用程序可以在不同环境之间轻松移动(如临时环境和生产环境)。租户的外壳设置不会包含此信息,所有租户将使用相同的全局配置。
相关主题是Shell配置提供程序。有关如何将所有外壳配置保留在数据库中的信息,请特别参阅关于数据库外壳配置提供程序的部分。

IOptions配置

您还可以从Web项目的Startup类中的代码配置IOptions。
许多Orchard Core功能都是通过管理UI配置的,站点设置存储在数据库中,和/或通过IOptions公开配置。如果您希望覆盖站点设置或默认设置,可以使用您自己的配置代码执行此操作。
例如,电子邮件模块允许通过SmtpSettings类进行SMTP配置,默认情况下,SmtpSettings类由给定租户的站点设置(在管理员上设置)填充。但是,您可以像这样覆盖Startup类中的站点设置(请注意,我们使用PostConfigure来覆盖站点设置值,但是如果模块不使用站点设置,您可以只使用Configure):

services
.AddOrchardCms()
.ConfigureServices(tenantServices =>
tenantServices.PostConfigure<SmtpSettings>(settings =>
{
settings.Port = 255;
})); // Or if you want to make use of IShellConfiguration as seen above:
services
.AddOrchardCms()
.ConfigureServices((tenantServices, serviceProvider) =>
{
// Instead of IShellConfiguration you could fetch the configuration
// values from an injected IConfiguration instance here too. While that
// would also allow you to access standard ASP.NET Core configuration
// keys it won't have support for all the hierarchical sources
// detailed above.
var shellConfiguration = serviceProvider.GetRequiredService<IShellConfiguration>();
var password = shellConfiguration.GetValue<string>("SmtpSettings:Password"); tenantServices.PostConfigure<SmtpSettings>(settings =>
{
settings.Password = password;
});
});

这将使SMTP端口使用此配置,而不考虑站点设置中定义的任何其他值。第二个示例的配置值可以来自例如appsettings.json文件,如下所示:

{
"OrchardCore": {
"SmtpSettings": {
"Password": "password"
}
}
}

在管理页面不会有此覆盖发生的提示,并且那里显示的值仍将是站点设置中配置的值,所以如果您选择这样做,您需要让您的用户知道。

ORCHARD_APP_DATA 环境变量

可以通过设置ORCHARD_APP_DATA环境变量来配置App_Data文件夹的位置。路径可以是相对于应用程序路径(./App_data)、绝对路径(/path/from/root)或完全限定路径(D:\path\to\App_data)。如果该文件夹不存在,应用程序将尝试创建它。

IShellConfiguration 配置在全局租户配置在App_data/appsettings.json中

这些设置也可以位于App_Data/appsettings.json文件夹(默认情况下不创建)中,其中指定的任何设置都将覆盖启动项目中的设置。

IShellConfiguration配置在单独的租户文件夹中

这些设置是可变的,并且在为租户设置期间写入。因此,不支持读取环境名称。此外,这些appsettings.json文件不需要OrchardCore节。

{
"OrchardCore_Media": {
... specific tenant configuration ...
}
}

IShellConfiguration通过环境变量配置

OrchardCore__OrchardCore_Media__MaxFileSize

OrchardCore__Default__OrchardCore_Media__MaxFileSize

OrchardCore__MyTenant__OrchardCore_Media__MaxFileSize

为了支持Linux,下划线_用作分隔符,例如OrchardCore_Media。 OrchardCore.Media也支持向后兼容,建议用户使用_的方式。

层级顺序

默认情况下,Orchard核心站点将在启动项目的Program.cs中使用CreateDefaultBuilder,它将按以下顺序加载IConfiguration。

1、启动项目appsettings.json。
2、启动项目appsettings.{Environment}.json。
3、用户机密(如果环境为开发)。
4、环境变量。
5、命令行参数。
6、然后,IShellConfiguration将为特定租户添加这些1.app_data/appsettings.json 2.app_data/site/{Tenant_Name}/appsettings.json。

注意:后面加载的如果具有相同Key的配置优先于较早加载的配置,以后面的为准。

Orchard Core 配置项说明的更多相关文章

  1. Orchard Core一分钟搭建ASP.NET Core CMS

    Orchard Core 是Orchard CMS的ASP.NET Core版本. Orchard Core是全新一代的ASP.NET Core CMS. 官方文档介绍:http://orchardc ...

  2. Orchard Core Framework:ASP.NET Core 模块化,多租户框架

    Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core ...

  3. 发布基于Orchard Core的友浩达科技官网

    2018.9.25 日深圳市友浩达科技有限公司发布基于Orchard Core开发的官网 http://www.weyhd.com/. 本篇文章为你介绍如何基于Orchard Core开发一个公司网站 ...

  4. Orchard Core学习一

    Orchard Core学习一 Orchard Core是ASP.NET Core上Orchard CMS的重新开发. Orchard Core由两个不同的目标组成: Orchard核心框架:用于在A ...

  5. Orchard Core 增加了一个API模块,要怎么调用

    如下,我在Orchard Core框架中添加了一个API的模块,并且定义了对应的权限才可以调用,那么我们现在考虑的就是要怎么去调用它. 首先,我们用Fiddler查看下我们正常的登录的http报文,直 ...

  6. Orchard Core 自定义权限配置

    在我们为Orchard Core配置了一个新的Module之后,我们要考虑的是谁可以访问这个Module,那么这里就涉及到了一个权限的配置.如下图,添加了自定义的权限: Orchard Core源码: ...

  7. Orchard Core 模块化

    在上一篇文章谈到如何搭好一个基础的Orchard Core项目. 今天要尝试Orchard Core的模块化. 我自己的理解:一个系统可以分成一个个模块,这一个个模块是由一个个类库去实现的. 首先,在 ...

  8. Orchard Core 版本冲突 The type 'FormTagHelper' exists in both 'Microsoft.AspNetCore.Mvc.TagHelpers, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' and...

    最近老大让我看Orchard Core,这是一个CMS系统.可以先参考大佬的文章:https://www.cnblogs.com/shanyou/archive/2018/09/25/9700422. ...

  9. 初试Orchard Core CMS

    关于Orchard Core CMS,这是一套内容管理系统(Content Management System),看一下来自官方文档的解释,什么是Orchard CMS. Orchard is a f ...

随机推荐

  1. msp432搭建平衡小车(二)

    前言 上一节掌握了使用pwm驱动电机,接下来介绍如何使用msp432读取mpu6050数据 正文 首先我们得知道mpu6050通信方式,由于mpu6050只能用i2c通信,所以学会使用msp432的i ...

  2. 「TJOI2019」唱、跳、rap 和篮球 题解

    题意就不用讲了吧-- 鸡你太美!!! 题意: 有 \(4\) 种喜好不同的人,分别最爱唱.跳. \(rap\).篮球,他们个数分别为 \(A,B,C,D\) ,现从他们中挑选出 \(n\) 个人并进行 ...

  3. Groovy+Spock单元测试

    一.导入依赖 Spock是基于JUnit的单测框架,提供一些更好的语法,结合Groovy语言,可以写出更为简洁的单测. <!-- groovy依赖 --> <dependency&g ...

  4. Intellj IDEA 光标显示insert状态解决办法

    使用idea过程中,不知道怎么回事,鼠标的光标老是insert状态,体验效果极其差劲,于是去百度,扒拉了好一阵,过滤了垃圾博客,发现了有两种方法可以解决此问题: 第一种方法: 在File------& ...

  5. GPRS RTU设备OPC Server接口C# 实现

    通过本OPC Server程序接口可为用户提供以OPC标准接口访问远程GPRS/3G/以太网 RTU设备实时数据的方式.从而方便实现GPRS/3G/以太网 RTU设备与组态软件或DCS系统的对接.本程 ...

  6. spring boot 的JPA项目

    pom 文件 -------------------------------------------------------------------------- <dependencies&g ...

  7. Vue.JS快速上手(Vue-router 实现SPA 开发)

    一.什么是路由 URL -> 映射 -> 组件 Hash+onhashchange History.pushstate+replaceState+onpopstate 二.准备工作 组件 ...

  8. MySQL 慢 SQL & 优化方案

    1. 慢 SQL 的危害 2. 数据库架构 & SQL 执行过程 3. 存储引擎和索引的那些事儿 3.1 存储引擎 3.2 索引 4. 慢 SQL 解决之道 4.1 优化分析流程 4.2 执行 ...

  9. 如何实现 Android 短视频跨页面的流畅续播?

    在一切皆可视频化的今天,短视频内容作为移动端产品新的促活点,受到了越来越多的重视与投入,同时短视频也是增加用户粘性.增加用户停留时长的一把利器.那么如何快速实现移动端短视频功能呢?前两篇我们介绍了盒马 ...

  10. Java基础(一)——面向对象

    一.对象 1.成员变量和局部变量的区别 两类变量同名时,局部变量具有更高的优先级. 作用域不同:局部变量的作用域仅限于定义它的方法,作用于函数或者语句中:成员变量的作用域在整个类中. 初始值不同:Ja ...