1. 程式人生 > >ABP官方文件翻譯 2.5 設定管理

ABP官方文件翻譯 2.5 設定管理

設定管理

介紹

  每個應用都需要儲存設定,並且在應用的某些地方需要使用這些設定。ABP提供了一個強大的在服務端和客戶端都可以使用的基礎設施儲存/獲取應用、租戶和使用者級別的設定。

  一個設定是一個名稱-值字串對,一般存放在資料庫(或其他源)。我們可以儲存非字串值,但需要把他們轉換成字串。

關於 ISettingStore

為了使用設定系統,ISettingStore介面必須實現。雖然可以用自己的方式實現,但是module-zero工程已經完整的實現了它。如果沒有實現的話,將會從應用的配置檔案(web.config或app.config)讀取配置,但是不能改變任何設定。設定範圍也不會起作用。

定義設定

  設定在使用前必須先定義。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或空字串。
  • Scopes:設定應該有範圍(參見下面部分)。
  • Display Name:本地化的字串,可以用來在UI中顯示的設定名稱。
  • Description:本地化的字串,可以用來在UI中顯示設定的描述資訊。
  • Group:用來進行組設定。僅對UI使用,在設定管理中沒有用。
  • IsVisibleToClients:設定為true可以使設定在客戶端可用。
  • IsInherited:用來決定設定是否通過租戶或使用者繼承的(參見設定範圍部分)。
  • CustomData:用來設定自定義資料。

  建立一個設定提供者之後,我們應該在模組的PreInitialize方法中註冊:

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

  設定提供者自動註冊到依賴注入系統。所以,設定提供者可以注入任何依賴項(比如倉儲),使用其他資源來建造設定定義。

設定範圍

有三種設定範圍(或級別),定義在SettingScopes列舉裡:

  • Application:應用級別用來設定使用者/租戶無關的設定。例如,我們可以頂一個名為“SmtpServerAddress”的設定,當傳送電郵的時候來獲取伺服器IP地址。如果這個設定只有一個值(不隨使用者改變),那麼這個設定可以定義為應用級別。
  • Tenant:如果應用是多租戶的,我們可以定義特定租戶的設定。
  • User:我們可以使用使用者範圍的設定來儲存/獲取每一個特定使用者的設定值。

  SettingScopes列舉有Flags特性,所以我們可以定義多餘一種級別的設定。

  設定範圍預設是分級的(除非設定isInherited為false)。例如,如果我們定義了一個設定的範圍為“Application | Tenant | User”並且嘗試獲取這個設定的當前值:

  • 如果它定義(重寫)為使用者級別的,將得到特定使用者的值。
  • 如果不是,將得到特定租戶的值,如果它定義(重寫)為租戶級別的。
  • 如果不是,將得到應用值,如果定義了的話。
  • 如果不是,將得到預設值。

  預設值可以為null或空字串。建議儘可能為設定提供預設值。

重寫設定定義

context.Manager可以用來獲取設定定義並可改變設定值。使用這種方式,可以用來操作依賴模組的設定定義。

獲取設定值

定義一個設定之後,我們可以在服務端和客戶端獲取設定的當前值。

服務端

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的屬性。如果我們派生自這些類,就不需要顯示的注入了。

客戶端

如果當定義設定時,將IsVisileToClients置為true,就可以在客戶端使用javascript獲取它的當前值。abp.setting名稱空間定義了需要的函式和物件。例如:

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

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

更改設定

ISettingManager定義了ChangeSettingForApplicationAsyncChangeSettingForTenantAsyncChangeSettingForUserAsync 方法(和非同步版本)用來更改應用、租戶、使用者的設定。

關於快取

設定管理器在服務端快取設定。所以,我們可以使用倉儲或資料庫更新查詢直接更改設定值。

返回主目錄

相關推薦

ABP官方翻譯 2.5 設定管理

設定管理 介紹   每個應用都需要儲存設定,並且在應用的某些地方需要使用這些設定。ABP提供了一個強大的在服務端和客戶端都可以使用的基礎設施儲存/獲取應用、租戶和使用者級別的設定。   一個設定是一個名稱-值字串對,一般存放在資料庫(或其他源)。我們可以儲存非字串值

ABP官方翻譯 3.5 規約

繼承 indent .cn 為什麽 pre 文檔 orm func creating 規約 介紹 示例 創建規範類 使用倉儲規約 組合規約 討論 什麽時候使用? 什麽時候不使用? 介紹   規約模式是一種特別的軟件設計模式,

《HttpClient官方2.5 連線驅逐策略

2.5. 連線驅逐策略 經典阻塞I / O模型的主要缺點之一是網路套接字只有在I / O操作阻塞時才能對I / O事件作出反應。當連線釋放回管理器時,它可以保持活動,但是它無法監視套接字的狀態,並對任何I / O事件做出反應。如果伺服器端關閉連線,客戶端這邊的連線將無法察覺連線狀態的變化(並且在

django 1.8 官方翻譯2-5-7 自定義查詢

自定義查詢 New in Django 1.7. Django為過濾提供了大量的內建的查詢(例如,exact和icontains)。這篇文件闡述瞭如何編寫自定義查詢,以及如何修改現存查詢的功能。關於查詢的API參考,詳見查詢API參考。 一個簡單的

Cloudera 從5.2.0升級到最新5.8.2官方翻譯

最近把叢集升級了,升級同時把官方文件翻譯了一下。初始文件整理在pages中,怎麼轉換過來格式都不太好看,先發圖片的吧,格式不太好的文字部分在後面。 ----------------------------------------------我是格式不好的文字的分割

ABP官方翻譯 3.2 值對象

-s str 如果 相等 bject 實踐 編號 整體 經典 值對象 介紹 值對象基類 最佳實踐 介紹   "展現領域描述性層面且沒有概念性身份的對象稱之為值對象。"(Eric Evans)。   和實體相反,實體有身份標示(Id),值對象沒有身份標示。

ABP官方翻譯 1.2 N層架構

分層 幫助 代碼復用 ajax請求 one 添加 數據 mapper 搜索引擎搜索 N層架構 介紹 ABP架構 其他(通用) 領域層 應用層 基礎設施層 網絡和展現層 其他 總結 介紹   應用程序代碼庫的分層架構是被廣泛認可的可以減少程序復雜度、提高代碼復用率的

ABP官方翻譯 5.4 SwaggerUI集成

head oauth addition tor component single main anti .net core SwaggerUI集成 介紹 ASP.NET Core 安裝Nuget包 配置 測試 ASP.NET 5.x 安裝Nu

ABP官方翻譯 6.1.2 MVC視圖

tar strong http span 繼承 ant net 方法 mvc視圖 ASP.NET MVC 視圖 介紹 AbpWebViewPage基類 介紹   ABP通過Abp.Web.Mvc nuget包集成到MVC視圖。你可以如往常一樣創建正常的MVC

ABP官方翻譯 6.2.1 ASP.NET Core集成

mic 模型 binder let 轉換 span optional document clas ASP.NET Core 介紹 遷移到ASP.NET Core? 啟動模板 配置 啟動類 模塊配置 控制器 應用服務作為控制器

【Gradle官方翻譯】起步2:建立構建掃描

構建掃描是對構建的可分享的專門記錄,可以看到“構建中發生了那些行為以及為什麼會發生這種行為”。通過在專案中使用構建掃描外掛,開發者可以免費地在https://scans.gradle.com/上釋出構建掃描。 將要建立的 本文會展示如何在不對任何構建指令碼進行

django 2.1官方翻譯-模板(進行中)

django的官方文件在transifex上翻譯,本來想貢獻一下,結果發現那個介面實在是受不了。自己翻吧 模板 作為一個Web框架,Django需要一種動態生成HTML的便捷方式。最常見的方法是使用模板。模板包含HTML輸出的靜態部分以及能插入動態內容的一些特殊語法。有關使用模板建立HT

《Spring Data 官方翻譯》preface到2.requirements

Cassandra支援的核心功能可以直接使用,無需呼叫Spring容器的IoC服務。這很像’JdbcTemplate’ 這樣的不使用Spring容器的其他任何服務就可以使用’standalone’ 。要利用Spring Data Cassandra的所有功能(如資源庫支援),您需要使用Spring庫的某些配

授人玫瑰 手留餘香 --紀念python3.2.3官方翻譯結束

當你點選看到這篇文章的時候,你已經得到了祝福。一個來自夜深人靜的碼農,在2014年5月19號的01:18分,默默為你獻上祝福。希望你,我和他,每一個在IT行業中奮鬥的人,能找到屬於自己一片天空。         在翻譯結束完3.2.3這份文件後,首先感謝我的客戶經理,當在

django 1.8 官方翻譯2-2-1 執行查詢

執行查詢 一旦你建立好資料模型之後,django會自動生成一套資料庫抽象的API,可以讓你執行增刪改查的操作。這篇文件闡述瞭如何使用這些API。關於所有模型檢索選項的詳細內容,請見。 在整個文件(以及參考)中,我們會大量使用下面的模型,它構成了一個部落格應用

Elasticsearch5.5官方翻譯-節點

概述 章節:Moudles>>Node 任何時候你啟動Elasticsearch的例項時,你啟動一個 節點。連線的節點的集合被稱為一個 叢集。如果您正在執行Elasticsearch的一個節點,那麼你有一個包含一個節點的叢集。

Python3.2官方翻譯--異常丟擲和自定義異常

6.4 丟擲異常 Raise語句執行程式設計師強制丟擲一個具體的異常。例如: >>> raise NameError(’HiThere’) Traceback (most recent call last): File "<stdin>", l

django 1.8 官方翻譯2-1-1 模型語法

模型 模型是你的資料的唯一的、權威的資訊源。它包含你所儲存資料的必要欄位和行為。通常,每個模型對應資料庫中唯一的一張表。 基礎: 模型的每個屬性都表示資料庫中的一個欄位。 Django 提供一套自動生成的用於資料庫訪問的API;詳見執行查詢。

django 1.8 官方翻譯:7-2 管理操作

管理操作 簡而言之,Django管理後臺的基本流程是,“選擇一個物件並改變它”。在大多數情況下,這是非常適合的。然而當你一次性要對多個物件做相同的改變,這個流程是非常的單調乏味的。 在這些例子中,Django管理後臺可以讓你實現和註冊“操作” —— 僅僅只是

Django 2.0 之Models(模型) 官方翻譯(一)

以下翻譯是自己學習的時候順便記下的,如果有不對的地方還請指正。 模型是關於你的資料的唯一、確定的資料來源。它包含你所儲存的資料的基本欄位和行為。通常,每個模型對映到一個數據庫表。 基礎知識: 每一個模型都是一個Python類,它是 django.db.models.Mo