返回总目录


本篇目录

介绍###

每个应用程序都需要存储一些设置信息,然后在应用程序中的某个地方使用这些设置。ABP提供了健壮的基础设施来存储或检索服务端和客户端的应用程序,租户,用户级别的可用设置。

一个设置一般是存储在数据库(或其他源)的name-value字符串对。我们可以将非字符串的值转换成字符串。

关于ISettingStore

为了使用设置系统,必须要实现ISettingStore。虽然你可以用自己的方式实现,但是它已完全实现在module-zero中了。

定义设置###

一个设置使用前必须先定义。ABP是模块化设计的,因此,不同的模块可以有不同的设置。要定义一个设置,一个模块应该创建一个派生于SettingProvider(设置提供器)的类。设置提供器的一个例子如下所示:

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
) };
}
}

GetSettingDefinitions方法应该返回SettingDefinition集合。SettingDefinition类的构造函数有一些参数:

  • Name(必须):一个设置的名称,在系统中名称必须唯一。最好为每个设置名定义一个常量字符串。
  • Default值:设置的默认值。可以为null或空字符串。
  • Scopes:一个设置应该定义它的范围(看下面)。
  • Dispaly name:在UI上显示的本地化的设置名。
  • Description:在UI上显示的本地化的设置描述。
  • Group:用于组合设置。这个用于UI而不是设置管理。
  • IsVisibleToClients:客户端是否可见。

创建一个设置提供器之后,我们应该在模块的PreInitialize方法中注册。

Configuration.Settings.Providers.Add<MySettingProvider>();

这样,设置提供器就自动注册到依赖注入系统中了。因此,设置提供器可以使用一些其他的资源注入任何依赖(如仓储)来生成设置定义。

设置范围

SettingScope枚举类中定义了三种设置范围(或者说等级)

  • Application:一个应用范围的setting对象用于用户或者租户独立的设置。比如,我们可以定义一个叫做“SmtpServerAddress”的设置来获取发送邮件时服务端的IP地址。如果该setting有一个单一值(基于用户不会改变),那么我们可以把它定义为应用范围的。
  • Tenant:如果应用程序时多租户的,那么我们可以定义租户特定的setting。
  • User:我们可以定义存储或者获取特定用户的设置。

SettingScopes枚举类型有Flags特性,因此我们可以定义一个不止一个范围的setting。

设置范围是有层次的,比如,如果我们定义的设置范围是“Application | Tenant | User”,并尝试获取该设置当前的值,那么:

  • 如果已定义了该用户的setting,那么就会获得该用户特定的值。
  • 如果上面的条件不成立,并且已经定义了该用户所属租户的setting,那么会获得该租户特定的值。
  • 如果上面的条件还不成立,如果定义了应用的值,那么会获得该应用的值。
  • 最后,我们会获得默认值

默认值可能是null或者空字符串。如果可能的话,建议为setting的默认值提供默认值。

获取设置值###

定义了一个setting之后,我们就可以在客户端和服务端获得它当前的值。

服务端

ISettingManager用于执行setting操作。我们可以在应用中的任何地方注入并使用它。ISettingManager定义了许多获取一个setting值的方法。

用的最多的方法是GetSettingValue(或者异步调用GetSettingValueAsync)。它会返回基于默认值,应用程序,租户和用户setting的当前的值(正如上面提到的)。例如:

//获取一个bool值(异步调用)
var value1 = await SettingManager.GetSettingValueAsync<bool>("PassiveUsersCanNotLogin"); //获取一个string值(同步调用)
var value2 = SettingManager.GetSettingValue("SmtpServerAddress");

GetSettingValue有泛型和异步版本,如上面所示。也有获得特定租户或者用户的setting值或者所有setting值的列表的方法。

因为ISettingManager使用广泛,所以一些特殊的基类(如ApplicationService,DomainService和AbpController)就有了一个叫做SettingManager的属性。如果我们从这些类中派生,那么就不需要显式注入它了。

客户端

当定义一个setting时,如果将IsVisibleToClients设置为true,那么可以使用javascript在客户端获得当前的值。abp.setting命名空间定义了一些用得到的函数和对象。例如:

var currentColor = abp.setting.get("SiteColorPreference");

也有getIntgetBoolean 方法。你可以使用abp.setting.values获得所有的值。注意:如果在服务端更改了一个setting,那么如果页面没有更新,setting没有重新加载或者通过代码手动更新的话,那么客户端就不知道该setting是否发生了变化。

更改设置###

ISettingManager为应用程序,租户和用户分别定义了ChangeSettingForApplicationAsync, ChangeSettingForTenantAsync和ChangeSettingForUserAsync方法来更改setting。

关于缓存###

Setting Manager(管理者)缓存到了服务端的setting了。因此,我们不应该使用仓储或者数据库更新来直接更改一个setting的值。

ABP理论学习之设置管理的更多相关文章

  1. X-Admin&ABP框架开发-设置管理

    在网站开发中,设置是不可缺少的一环,如用户设置.系统设置.甚至是租户设置等.ABP对于设置的管理已经做了很好的处理,我们可以借助巨人的力量来完成我们的冒险. ABP官网地址:https://aspne ...

  2. ABP理论学习之功能管理

    返回总目录 本篇目录 介绍 功能类型 定义功能 检查功能 功能管理者 版本说明 介绍 大多数的Saas(多租户)应用都有不同 功能的 版本(包).因此,他们可以给租户(客户)提供不同的 价格和功能选项 ...

  3. ABP(现代ASP.NET样板开发框架)系列之9、ABP设置管理

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之9.ABP设置管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  4. ABP框架 - 设置管理

    文档目录 本节内容: 简介 关于ISettingStore 定义设置 setting scope(设置范围) 重写设置定义 获取设置值 服务端 客户端 修改设置 关于缓存 简介 每个应用必需存储一些设 ...

  5. ABP官方文档翻译 2.5 设置管理

    设置管理 介绍 关于 ISettingStore 定义设置 设置范围 重写设置定义 获取设置值 服务端 客户端 更改设置 关于缓存 介绍 每个应用都需要存储设置,并且在应用的某些地方需要使用这些设置. ...

  6. 初识ABP vNext(10):ABP设置管理

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 定义设置 使用设置 最后 前言 上一篇介绍了ABP模块化开发的基本步骤,完成了一个简单的文件上传功能.通常的模块都有一 ...

  7. ABP设置管理模块: Abp.SettingUi

    开源地址: https://github.com/EasyAbp/Abp.SettingUi 一直想宣传一下SettingUi, 因为 懒 工作比较忙, 所以才拖到今天. 关于ABP就不需要我再多废口 ...

  8. ABP理论学习之开篇介绍

    返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...

  9. ABP理论学习之数据过滤器

    返回总目录 本篇目录 介绍 预定义过滤器 关闭过滤器 开启过滤器 设置过滤器参数 定义自定义过滤器 其他ORM 介绍 软删除模式通常用于不会真正从数据库删除一个实体而是仅仅将它标记为"已删除 ...

随机推荐

  1. PhpStorm 快捷键大全 PhpStorm 常用快捷键和配置

    PhPStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能.Phpstrom的一款名 ...

  2. 不注册COM在Richedit中使OLE支持复制粘贴

    正常情况下在Richedit中使用OLE,如果需要OLE支持复制粘贴,那么这个OLE对象必须是已经注册的COM对象. 注册COM很简单,关键问题在于注册时需要管理员权限,这样一来,如果希望APP做成绿 ...

  3. Python-函数的返回值

    特点: - 函数被调用后会返回一个指定的值 - 函数调用后默认返回none - return用于函数内部返回值 - 返回值可以是任意类型 - return执行后,函数终止   注意: 所有函数默认都有 ...

  4. FZU 2137 奇异字符串 后缀树组+RMQ

    题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...

  5. swift 单独部署,开发

    部署环境 virtualBox Ubuntu 14.04 desktop OpenStack Swift (kilo) 说明 此文档为基于官方修改的只针对Ubuntu 14.04,完整的参阅官方文档 ...

  6. 希尔伯特矩阵(Hilbert matrix)

    例: [ 1 1/2 1/3  1/2 1/3 1/4  1/3 1/4 1/5 ]   矩阵的一种,其元素A(i,j)=1/(i+j-1),i,j分别为其行标和列标. 即: [1,1/2,1/3,- ...

  7. python 爬虫(二)

    python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...

  8. 搭建selenium grid简单配置

    1.使用selenium提供的服务端独立jar包 :服务端.客户端都是运行于java7环境. 2.启动hub: hub配置文件如下: Java -jar selenium-server-standal ...

  9. 【面试题】M

    一面: 1.介绍实习项目: 2.计算二叉树叶子节点的数量: 3.排序算法有哪些,手写快排: 4.长度为100的数组,值为1~100,乱序,将其中一个值改为0,找出被更改的值以及位置: 5.输入数值0~ ...

  10. 弄清 CSS3 的 transition 和 animation

    弄清 CSS3 的 transition 和 animation transition transition 属性是 transition-property, transition-duration, ...