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中使用这些方法