ABP 使用默认值将设置存储在内存中。当您将新设置值插入数据库时,它会从数据库中读取并覆盖默认值。所以基本上当数据库没有设置时,这意味着所有设置都是默认值。设置值存储在 AbpSettings 表中。
开始使用设置机制。创建您自己的继承自 SettingProvider 的 SettingProvider。在你的模块中初始化它(例如:
ModuleZeroSampleProjectApplicationModule)。
由于 SettingProvider 会自动注册到依赖注入;您可以在任何地方注入 ISettingManager。
public class MySettingProvider : SettingProvider
{
public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
{
return new[]
{
new SettingDefinition(
"SmtpServerAddress",
"127.0.0.1"
),
new SettingDefinition(
"PassiveUsersCanNotLogin",
"true",
scopes: SettingScopes.Application | SettingScopes.Tenant
),
new SettingDefinition(
"SiteColorPreference",
"red",
scopes: SettingScopes.User,
isVisibleToClients: true
)
};
}
}
在应用服务和控制器中你不需要注入 ISettingManager
(因为已经注入了属性),您可以直接使用 SettingManager 属性。例如:
//Getting a boolean value (async call)
var value1 = await SettingManager.GetSettingValueAsync<bool>("PassiveUsersCanNotLogin");
而对于其他的类(比如域服务)可以注入 ISettingManager
public class UserEmailer : ITransientDependency
{
private readonly ISettingManager _settingManager;
public UserEmailer(ISettingManager settingManager)
{
_settingManager = settingManager;
}
[UnitOfWork]
public virtual async Task TestMethod()
{
var settingValue = _settingManager.GetSettingValueForUser("SmtpServerAddress", tenantAdmin.TenantId, tenantAdmin.Id);
}
}
注意:要修改设置,您可以在 SettingManager 中使用这些方法 ChangeSettingForApplicationAsync、ChangeSettingForTenantAsync 和 ChangeSettingForUserAsync