文档目录

本节内容:

简介

每个应用必需存储一些设置,并在应用里的某处使用它。ABP提供一个强大的基础来存储/获取应用、租户和用户级别的设置,服务端与客户端都可以。

一个设置是一对name-value字符串,通常存储在数据库(或其它源)。我们可以把不是字符串类的值,转换成字符串后存储。

关于 ISettingStore

为使用设置系统,必须实现ISettingStore接口。虽然你能用自己的方式实现它,不过在module-zero项目里已经完全实现。如果不实现它,会从配置文件(web.config或app.config)中读取设置,但不能修改设置。同样,scope不能工作。

定义设置

设置在用前需要先定义,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 value:有一个默认值,可以是null或“”。
  • Scope:一个设置应该有它的Scope(见下方)。
  • Display name:一个显示在UI上的本地化名称字符串。
  • Description:一个显示在UI上的本地化描述字符串
  • Group:只用在UI上,不在设置管理里使用,用来群组设置。
  • IsVisibleToClients:设为true使客户端上的设置可用。
  • isInherited:这个设置是否被租户和用户继承(见“设置 scope”)。
  • customData:为这个定义设置一个用户数据。

在创建一个设置供应器后,我们应该为我们的模块,在预初始化方法里注册它。

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

设置供应器会自动被依赖注入所注册,所以一个设置供应器可以注入任何依赖(如一个仓储),以用途其它源建立设置定义。

setting scope(设置范围)

在SettingScopes枚举里,有三个设置范围(或级别):

  • Application:一个应用范围的设置,用在用户/租户的独立设置。例如,我们可以定义一个名为“SmtpServerAddress”,在发送邮件时,获取服务器Ip地址。如果这个设置有个单一值(不是基于用户而变),我们就可以把它定义为应用范围。
  • Tenant:如果应用多租户,我们可以定义指定租户的设置。
  • User:我们可以使用一个用户范围的设置来存储/获取每个用户指定设置的值。

SettingScopes枚举有Flags(标志)特性,所以我们可以用多个范围(级别)定义一个设置。

设置范围在默认情况下是有继承关系的(除非你设置了isInherited为false)。例如,我们定义一个设置范围为“Application | Tenant | user” 然后尝试获取设置的当前值:

  • 如果它定义(重写)为user,我们就获取特定User的值。
  • 如果不是,如果它定义(重写)为tanant,我们就获取特定Tenant的值。
  • 如果不是,如果已定义,我们获取Application值。
  • 如果不是,我们获取默认值。

默认值可能是null或“”。建议为设置尽可能地提供默认值。

重写设置定义

context.Manager可获取一个设置定义,并修改它的值,这种方式,可以操作依赖模块的设置定义。

获取设置值

在定义一个设置后,我们可在服务端和客户端获取它的当前值。

服务端

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

常用的方法是GetSettingValue(或异常GetSettingValueAsync),获取设置基于范围级别(Application,Tenant,User)的当前值(如前面所述),例如:

//Getting a boolean value (async call)
var value1 = await SettingManager.GetSettingValueAsync<bool>("PassiveUsersCanNotLogin"); //Getting a string value (sync call)
var value2 = SettingManager.GetSettingValue("SmtpServerAddress");

GetSetrtingValue有泛型和异常版本,如上所述。当然也有方法能获取一个指定租户或用户的设置值或所有值列表。

由于广泛地使用了ISettingManager,一些特殊的基类(如ApplicationService,DomainService和AppController)有一个SettingManager属性。如果你从这些类继承,就不再需要显式注入ISettingManager。

客户端

如果你在定义一个设置时,把IsVisibleToClicents设为true,那么你可以在客户端使用Javascript获取它的当前值。abp.setting命名空间定义了所需的函数和对象,例如:

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

同样还有getInt和getBoolean方法,你可以使用abp.setting.values对象获取所有值。注意:如果你在服务端修改一个设置,除非刷新页面、以某种方式重新载入设置和用手工代码更新,否则客户端不会知道这个修改。

修改设置

ISetingManager定义了ChangeSettingForApplicationAsync,ChangeSettingForTenantAsync和ChangeSettingForUserAsync(和同步版)方法,分别为一个应用,一个租户和一个用户修改设置。

关于缓存

设置管理的缓存在服务端设置,所以我们不应该直接用仓储或数据库更新查询来修改一个设置。

ABP框架 - 设置管理的更多相关文章

  1. ABP框架 - 功能管理

    文档目录 本节内容: 简介 关于 IFeatureValueStore 功能类型 Boolean 功能 Value 功能 定义功能 基本功能属性 其它功能属性 功能层次 检查功能 使用Requires ...

  2. ABP框架设置默认语言

    在Global.asax文件中设置 private readonly IAbpWebLocalizationConfiguration _webLocalizationConfiguration; p ...

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

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

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

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

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

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

  6. 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问

    中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  7. ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理

    在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...

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

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

  9. ABP理论学习之设置管理

    返回总目录 本篇目录 介绍 定义设置 获取设置值 更改设置 关于缓存 介绍 每个应用程序都需要存储一些设置信息,然后在应用程序中的某个地方使用这些设置.ABP提供了健壮的基础设施来存储或检索服务端和客 ...

随机推荐

  1. AutoMapper

    什么是AutoMapper? AutoMapper是一个对象和对象间的映射器.对象与对象的映射是通过转变一种类型的输入对象为一种不同类型的输出对象工作的.让AutoMapper有意思的地方在于它提供了 ...

  2. solr_架构案例【京东站内搜索】(附程序源代码)

    注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...

  3. iOS二维码生成、识别、扫描等

    二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...

  4. Minor【 PHP框架】1.简介

    1.1 Minor是什么 Minor是一个简单但是优秀的符合PSR4的PHP框架,It just did what a framework should do. 只做一个框架应该做的,简单而又强大! ...

  5. 神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观

    前言 哦,不搞SQL了么,当然会继续,周末会继续更新,估计写完还得几十篇,但是我会坚持把SQL更新完毕,绝不会烂尾,后续很长一段时间没更新的话,不要想我,那说明我是学习新的技能去了,那就是学习英语,本 ...

  6. shiro权限管理框架与springmvc整合

    shiro是apache下的一个项目,和spring security类似,用于用户权限的管理‘ 但从易用性和学习成本上考虑,shiro更具优势,同时shiro支持和很多接口集成 用户及权限管理是众多 ...

  7. Java消息队列--JMS概述

    1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  8. 利用for循环找出1000以内的质数

    var n=0; for(var i=2;i<=1000;i++){  var zhishu=true;  for(var j=2;j<i;j++){    if(i%j==0){    ...

  9. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  10. 港真,到底应该选择OA还是BPM?

    越来越多企业意识到流程管理的重要性,但是,选择OA还是BPM,却让他们产生了选择困难症. 一方面,企业皆注重流程的高效运转,最好内外部的业务都能用一个系统来解决.所有流程一天就能上线什么的,那就更好啦 ...