Asp.net Boilerplate - 使用数据库实现设置管理器

时间:2017-08-29 16:59:01

标签: asp.net-core aspnetboilerplate

我使用asp.net样板模板构建了一个asp.net核心网站。截至目前,我已将所有设置存储在appsettings.json文件中。随着应用程序变得越来越大,我想我应该开始通过ABP的SettingProvider和ISettingStore存储一些设置。

我的问题是,是否有人拥有或知道一个示例应用程序,它展示了如何实现ISettingStore并将设置存储在数据库中?

到目前为止,我能找到的唯一一个帖子是this,但链接hikalkan供应已被破坏。

感谢您的帮助, 乔

1 个答案:

答案 0 :(得分:1)

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

中使用这些方法