1. 程式人生 > >ABP(現代ASP.NET樣板開發框架)系列之9、ABP設定管理

ABP(現代ASP.NET樣板開發框架)系列之9、ABP設定管理

基於DDD的現代ASP.NET開發框架--ABP系列之9、ABP設定管理

ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。

本文由山東-李偉提供翻譯

介紹

每個應用程式需要儲存一些設定並在應用程式的某個地方使用這些設定。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 (必填):必須具有全系統唯一的名稱。比較好的辦法是定義字串常量來設定Name。
  • Default value: 設定一個預設值。此值可以是null 或空字串。
  • Scopes: 定義設定的範圍 (見下文)。
  • Display name: 一個可本地化的字串,用於以後在UI中顯示設定的名稱。
  • Description: 一個可本地化的字串,用於以後在UI中顯示設定的描述。
  • Group: 可用於設定組。這僅僅是UI使用,不用於設定管理。
  • IsVisibleToClients: 設定為 true 將使設定在客戶端可用。

在建立設定提供程式(SettingProvider)之後,我們應該在預初始化(PreIntialize)方法中註冊我們的模組:

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

設定提供程式會自動註冊依賴注入。所以,設定提供程式可以注入任何依賴項 (如儲存庫) 來生成設定定義的一些其它來源。

設定範圍

有三個設定範圍 (或級別) 在 SettingScopes 列舉中定義:

  • Application:應用程式範圍設定用於使用者/租戶獨立的設定。例如,我們可以定義一個名為"SmtpServerAddress"的設定,當傳送電子郵件時,獲取伺服器的 IP 地址。如果此設定有一個單一的值 (不基於使用者改變),那麼我們可以定義它為應用程式範圍。
  • Tenant:如果應用程式是多租戶的,我們可以定義特定於租戶的設定。
  • User:我們可以使用的使用者範圍的設定來為每個使用者儲存/獲取設定的值。

SettingScopes 列舉具有Flags屬性,所以我們可以定義一個具有多個作用域的設定。


設定範圍是分層的。例如,如果我們定義設定範圍為"Application | Tenant | User"並嘗試獲取當前設定的值;

  • 我們獲取特定使用者的值,如果它定義 (重寫) User。
  • 如果沒有,我們獲取特定的租戶值,如果它定義 (重寫) Tenant。
  • 如果沒有,我們獲取應用的值,如果它定義Application。
  • 如果沒有,我們得到的預設值。

預設值可以是 null 或空字串。如果可以,建議為設定提供一個預設值。

獲取設定值

定義設定後,我們可以在伺服器和客戶端獲取到它的當前值。

(1)伺服器端(Server side)

ISettingManager 用於執行設定操作。我們可以在應用程式中任何地方注入和使用它。ISettingManager 定義了很多獲取設定值方法。

最常用的方法是 GetSettingValue (或GetSettingValueAsync 為非同步呼叫)。它將返回當前設定的基於預設值、 應用程式、 租戶和使用者設定範圍的值(如設定範圍之前的一段中所述)。例子:

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

GetSettingValue 有泛型和非同步版本,如上所示。也有方法來獲取特定的租戶或使用者的設定值或所有設定值的列表。

由於ISettingManager使用廣泛,一些特定的基類 (如 ApplicationService、 DomainService 和 AbpController) 有一個名為 SettingManager的屬性。如果我們從這些類繼承,就無需顯式地注入它。

(2)客戶端

如果定義設定時將 IsVisibleToClients 設定為 true,就可以在客戶端使用 javascript得到它的當前值。abp.setting 名稱空間定義所需的函式和物件。示例:

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

也有 getInt 和 getBoolean 這樣的方法。你可以使用 abp.setting.values 物件獲取所有值。請注意,如果你在伺服器端更改設定,客戶端不會知道這種變化,除非重新整理頁面或者以某種方式重新載入頁面或者通過程式碼手動更新。

更改設定

ISettingManager 定義了 ChangeSettingForApplicationAsyncChangeSettingForTenantAsyncChangeSettingForUserAsync 方法(以及同步版本)來更改應用程式,租戶和使用者分別的設定。

關於快取

快取在伺服器端設定管理,所以,我們不應直接使用儲存庫或資料庫更新語句改變設定的值。

希望更多國內的架構師能關注到ABP這個專案,也許這其中有能幫助到您的地方,也許有您的參與,這個專案可以發展得更好。

歡迎加ABP架構設計交流QQ群:134710707

ABP架構設計交流群

相關推薦

ABP(現代ASP.NET樣板開發框架)系列9ABP設定管理

基於DDD的現代ASP.NET開發框架--ABP系列之9、ABP設定管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由山東-李偉提供翻譯 介紹 每個應用程式需要儲存一些設定並在應用程式的某個地方使用這些設定。

ABP(現代ASP.NET樣板開發框架)系列10ABP領域層——實體

基於DDD的現代ASP.NET開發框架--ABP系列之10、ABP領域層——實體 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由深圳-Carl提供翻譯 實體是DDD(領域驅動設計)的核心概念之一。Eric Eva

ABP(現代ASP.NET樣板開發框架)系列4ABP模組系統

基於DDD的現代ASP.NET開發框架--ABP系列之4、ABP模組系統 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由東莞-天道提供翻譯  ABP模組系統簡介 ABP框架提供了建立和組裝模組的基礎,一個模組

ABP(現代ASP.NET樣板開發框架)系列6ABP依賴注入

基於DDD的現代ASP.NET開發框架--ABP系列之6、ABP依賴注入 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由 上海-半冷 提供翻譯 什麼是依賴注入 如果你已經知道依賴注入的概念,建構函式和屬性注入

ABP(現代ASP.NET樣板開發框架)系列2ABP入門教程

基於DDD的現代ASP.NET開發框架--ABP系列之2、ABP入門教程 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的

ABP(現代ASP.NET樣板開發框架)系列17ABP應用層——引數有效性驗證

基於DDD的現代ASP.NET開發框架--ABP系列之17、ABP應用層——引數有效性驗證 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 應用程式的輸入資料首先應該被檢驗是否有效。輸入的資料能被使用者或其他應用程式提

ABP(現代ASP.NET樣板開發框架)系列16ABP應用層——資料傳輸物件(DTOs)

基於DDD的現代ASP.NET開發框架--ABP系列之16、ABP應用層——資料傳輸物件(DTOs) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 資料傳輸物件(Data Transfer Objects)用於應用層

ABP(現代ASP.NET樣板開發框架)系列13ABP領域層——資料過濾器(Data filters)

基於DDD的現代ASP.NET開發框架--ABP系列之13、ABP領域層——資料過濾器(Data filters) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 介紹 在資料庫開發中,我們一般會運用軟刪除(soft

ABP(現代ASP.NET樣板開發框架)系列21ABP展現層——Javascript函式庫

基於DDD的現代ASP.NET開發框架--ABP系列之21、ABP展現層——Javascript函式庫 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate的js庫提供了一些讓java

ABP(現代ASP.NET樣板開發框架)系列14ABP領域層——領域事件(Domain events)

基於DDD的現代ASP.NET開發框架--ABP系列之14、ABP領域層——領域事件(Domain events) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 在C#中,一個類可以定義其專屬的事件並且其它類可以註冊該事

ABP(現代ASP.NET樣板開發框架)系列5ABP啟動配置

基於DDD的現代ASP.NET開發框架--ABP系列之5、ABP啟動配置 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由 東莞-天道 提供翻譯 譯者注:在看這一節的內容之前,建議大家先下載module-ze

ABP(現代ASP.NET樣板開發框架)系列3ABP分層架構

基於DDD的現代ASP.NET開發框架--ABP系列之3、ABP分層架構 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 前言 為了減少複雜性和提高程式碼的可重用性,採用分層架構是一種被廣泛接受的技術。為了實現分層的

ABP(現代ASP.NET樣板開發框架)系列19ABP應用層——審計日誌

基於DDD的現代ASP.NET開發框架--ABP系列之19、ABP應用層——審計日誌 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 維基百科定義:審計跟蹤(也稱為稽核日誌)是一個安全相關的時間順序記錄,記錄這些記錄的

ABP(現代ASP.NET樣板開發框架)系列15ABP應用層——應用服務(Application services)

基於DDD的現代ASP.NET開發框架--ABP系列之15、ABP應用層——應用服務(Application services) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由東莞-天道提供翻譯 應用服務用於將領

ABP(現代ASP.NET樣板開發框架)系列23ABP展現層——異常處理

基於DDD的現代ASP.NET開發框架--ABP系列之23、ABP展現層——異常處理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 在 web 應用程式中,異常通常是在 MVC Controller actions

ABP(現代ASP.NET樣板開發框架)系列8ABP日誌管理

基於DDD的現代ASP.NET開發框架--ABP系列之8、ABP日誌管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由東莞-天道提供翻譯 Server side(伺服器端) ASP.NET Boilerpla

ABP(現代ASP.NET樣板開發框架)系列1ABP總體介紹

基於DDD的現代ASP.NET開發框架--ABP系列之1、ABP總體介紹 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的

ABP(現代ASP.NET樣板開發框架)系列12ABP領域層——工作單元(Unit Of work)

基於DDD的現代ASP.NET開發框架--ABP系列之12、ABP領域層——工作單元(Unit Of work) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 通用連線和事務管理方法 連線和事務管理是使用資料庫的應用程

ABP(現代ASP.NET樣板開發框架)系列22ABP展現層——導航欄設定

基於DDD的現代ASP.NET開發框架--ABP系列之22、ABP展現層——導航欄設定 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 每一個WEB應用程式都有導航選單,Abp也為使用者提供了通用的建立和顯示選單方式。

ABP(現代ASP.NET樣板開發框架)系列7ABP Session管理

基於DDD的現代ASP.NET開發框架--ABP系列之7、ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 簡介 如果一個應用程式需要登入,則它必須知道當前使用者執行了什麼操作。因此ASP.