详解ABP框架中的日志管理和设置管理的基本配置

2019-04-01 08:59:17刘景俊

•Display name: 一个可本地化的字符串,用于以后在UI中显示设置的名称。
•Description: 一个可本地化的字符串,用于以后在UI中显示设置的描述。
•Group: 可用于设置组。这仅仅是UI使用,不用于设置管理。
•IsVisibleToClients: 设置为 true 将使设置在客户端可用。
在创建设置提供程序(SettingProvider)之后,我们应该在预初始化(PreIntialize)方法中注册我们的模块:

Configuration.Settings.Providers.Add<MySettingProvider>();设置提供程序会自动注册依赖注入。所以,设置提供程序可以注入任何依赖项 (如存储库) 来生成设置定义的一些其它来源。

 设置范围
有三个设置范围 (或级别) 在 SettingScopes 枚举中定义:

•Application:应用程序范围设置用于用户/租户独立的设置。例如,我们可以定义一个名为"SmtpServerAddress"的设置,当发送电子邮件时,获取服务器的 IP 地址。如果此设置有一个单一的值 (不基于用户改变),那么我们可以定义它为应用程序范围。
•Tenant:如果应用程序是多租户的,我们可以定义特定于租户的设置。
•User:我们可以使用的用户范围的设置来为每个用户存储/获取设置的值。
SettingScopes 枚举具有Flags属性,所以我们可以定义一个具有多个作用域的设置。

设置范围是分层的。例如,如果我们定义设置范围为"Application | Tenant | User"并尝试获取当前设置的值;

•我们获取特定用户的值,如果它定义 (重写) User。
•如果没有,我们获取特定的租户值,如果它定义 (重写) Tenant。
•如果没有,我们获取应用的值,如果它定义Application。
•如果没有,我们得到的默认值。
默认值可以是 null 或空字符串。如果可以,建议为设置提供一个默认值。

获取设置值
定义设置后,我们可以在服务器和客户端获取到它的当前值。

(1)服务器端(Server side)
ISettingManager 用于执行设置操作。我们可以在应用程序中任何地方注入和使用它。ISettingManager 定义了很多获取设置值方法。

最常用的方法是 GetSettingValue (或GetSettingValueAsync 为异步调用)。它将返回当前设置的基于默认值、 应用程序、 租户和用户设置范围的值(如设置范围之前的一段中所述)。例子:

//Getting a boolean value (async call)
var value1 = await SettingManager.GetSettingValueAsync<bool>("PassiveUsersCanNotLogin");
//Getting a string value (sync call)
var value2 = SettingManager.GetSettingValue("SmtpServerAddress"); 

GetSettingValue 有泛型和异步版本,如上所示。也有方法来获取特定的租户或用户的设置值或所有设置值的列表。

由于ISettingManager使用广泛,一些特定的基类 (如 ApplicationService、 DomainService 和 AbpController) 有一个名为 SettingManager的属性。如果我们从这些类继承,就无需显式地注入它。