2

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

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

到目前为止,我能找到的唯一帖子是这个,但链接 hikalkan 用品已损坏。

感谢您的帮助,乔

4

1 回答 1

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

于 2017-09-05T07:03:42.070 回答