<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


        
      在網(wǎng)站開發(fā)中,設置是不可缺少的一環(huán),如用戶設置、系統(tǒng)設置、甚至是租戶設置等。ABP對于設置的管理已經(jīng)做了很好的處理,我們可以借助巨人的力量來完成我們的冒險。

        ABP官網(wǎng)地址:https://aspnetboilerplate.com/ <https://aspnetboilerplate.com/>

      ?

      一、設置的層級劃分


        ABP中提供了三種類型的設置,用戶級別、應用級別、租戶級別,針對于不同級別有著不同的側(cè)重點,比如用戶級別,針對于用戶的一些設置,如主題設置,接收通知設置等;針對應用級別,該級別也能在用戶層級上進行影響,好比如設置統(tǒng)一的主題皮膚,而它主要體現(xiàn)在整個應用程序上的一些設置,如業(yè)務開發(fā)中用到的流水號自定義等,在應用程序級別進行配置;而針對租戶級別,可以為特定租戶完成設置(租戶級別個人暫沒有涉及到)。

        

      ?

      二、定義設置

      1、
      先得定義設置才能使用設置,首先創(chuàng)建一個類并繼承SettingProvider類,ABP已經(jīng)在Core層創(chuàng)建了一個AppSettingProvider類,直接使用該類即可,如果需要在其它模塊中(ABP是模塊化的)定義設置,可以直接參照這個類,并且在模塊中注冊即可。
      /// <summary> /// 設置命名 /// </summary> public static class AppSettingNames { ///
      <summary> /// 系統(tǒng)管理 /// </summary> public static class HostManagement { public
      const string CompanyName = "App.CompanyName"; public const string
      CompanyAddress ="App.CompanyAddress"; } public const string UiTheme = "
      App.UiTheme"; }
        為保證后期業(yè)務上的設置不產(chǎn)生影響,還是先進行區(qū)分好了,建立一個系統(tǒng)設置來維護一些相對于用戶和租戶而言獨立的應用層級的設置。

      ?

      2、開始定義設置項信息,從ABP官網(wǎng)文檔中看到有一個SettingDefinition類,用于定義設置項信息,查看該類創(chuàng)建時需要的參數(shù)

      * name:命名 (必填),命名必須系統(tǒng)內(nèi)唯一,建議是用常量字符串;
      * defaultValue:默認值(選填),能為null或空字符串;
      * displayName:顯示名稱(選填),UI呈現(xiàn)上顯示的名稱;
      * group:分組(選填),可對同一類別的設置進行分組,用于UI上分組展示;
      * description: 設置項描述(選填),UI上呈現(xiàn)該設置項的描述信息;
      * scopes:設置范圍(默認是應用層級),用于定義該設置項是用于哪一層級,該設置范圍可以歸屬多個層級;
      * isVisibleToClients:客戶端是否可見(默認false),?客戶端能否看見該設置及設置項值;
      * isInherited: 是否從父級設置項繼承(默認為true),當取值時可以從設置范圍上進行層級獲??;
      * customData: 自定義數(shù)據(jù)(選填),對于設置項設置自定義格式的數(shù)據(jù);
      * clientVisibilityProvider:客戶端可見方式(默認不可見); /// <summary> /// 獲取系統(tǒng)管理設置 ///
      </summary> /// <returns></returns> private IEnumerable<SettingDefinition>
      GetHostSettings() {return new[] { new SettingDefinition(
      AppSettingNames.HostManagement.CompanyName,"星城科技" ), new SettingDefinition(
      AppSettingNames.HostManagement.CompanyAddress,"湖南長沙" ), }; }

      ?  首先來定義兩個簡單的設置項,其中默認值直接寫死了,這種做法顯得太low了,一般來講,是需要寫到配置文件中的,因此對這一塊進行改造,增加從配置文件中根據(jù)設置項名稱讀取默認值的功能,參照Abp
      Zero中的一些代碼,CV操作到Abp中,新增一個接口IAppConfigurationAccessor并增加一個實現(xiàn)AppConfigurationAccessor。
      public class AppConfigurationAccessor : IAppConfigurationAccessor,
      ISingletonDependency {public IConfigurationRoot Configuration { get; } public
      AppConfigurationAccessor() { Configuration=
      AppConfigurations.Get(Directory.GetCurrentDirectory()); } }

      ?  然后在定義設置類中引入對配置文件的操作,如果給定的設置項名稱存在于配置文件中(appsetting.json或其它環(huán)境下的該文件),那么先讀取配置文件中的值,讀取不到使用默認值。
      private string GetFromAppSettings(string name, string defaultValue = null) {
      return GetFromSettings("App:" + name, defaultValue); } private string
      GetFromSettings(string name, string defaultValue = null) { return
      _appConfiguration[name] ?? defaultValue; }
      ?  改造設置定義部分,使用從配置文件中讀取的形式,此處可以給定默認值(選填)。
      private IEnumerable<SettingDefinition> GetHostSettings() { return new[] { new
      SettingDefinition( AppSettingNames.HostManagement.CompanyName,
      GetFromSettings(AppSettingNames.HostManagement.CompanyName) ),new
      SettingDefinition( AppSettingNames.HostManagement.CompanyAddress,
      GetFromSettings(AppSettingNames.HostManagement.CompanyAddress) ), }; }
      ?

      三、封裝服務


        ABP在應用層已經(jīng)封裝了一些設置的常用操作,我們需要做的只是在這基礎上,擴展加入的設置項,在IConfigurationAppService中添加獲取系統(tǒng)設置及更新系統(tǒng)設置的方法聲明,并在ConfigurationAppService中給與實現(xiàn),并且配置好相關的權限設置。
      [AbpAuthorize(PermissionNames.Pages_HostSettings)] public async
      Task<HostSettingsEditDto> GetAllHostSettings() { return new HostSettingsEditDto
      { CompanySettingsEditDto= await GetCompanySettingsAsync() }; }
      [AbpAuthorize(PermissionNames.Pages_HostSettings)]public async Task
      UpdateAllHostSettings(HostSettingsEditDto input) {await
      UpdateCompanySettingsAsync(input.CompanySettingsEditDto); }

      ?  此處對于設置的管理是將全部設置讀出,并全部寫入完成更新,而不是采用單個更新形式,當然也能改成一個一個配置,但是操作上相對繁瑣,針對設置的更新,ABP給出了三個方法,直接調(diào)用即可,三個方法針對三個層級,按照實際使用調(diào)用即可。

      * ChangeSettingForApplicationAsync
      * ChangeSettingForTenantAsync
      * ChangeSettingForUserAsync
        在MVC層增加系統(tǒng)設置控制器,并完成系統(tǒng)設置的讀取和更新操作。
      /// <summary> /// 系統(tǒng)設置控制器 /// </summary> [AbpMvcAuthorize] public class
      HostSettingsController : SurroundControllerBase {private readonly
      IConfigurationAppService _configurationAppService;public
      HostSettingsController(IConfigurationAppService configurationAppService) {
      _configurationAppService= configurationAppService; } /// <summary> /// 系統(tǒng)設置首頁
      /// </summary> /// <returns></returns> public async Task<IActionResult> Index()
      {var settings = await _configurationAppService.GetAllHostSettings(); return
      View(settings); }/// <summary> /// 更新系統(tǒng)設置 /// </summary> /// <param
      name="input"></param> /// <returns></returns> [HttpPost] public async Task
      UpdateAllSettings([FromBody]HostSettingsEditDto input) {await
      _configurationAppService.UpdateAllHostSettings(input); } }

      ?  增加視圖文件并在頁面上通過tab完成對設置類型的區(qū)分,初次進入頁面加載的是從appsetting.json中配置的默認值,其次更改保存后,便是新的設置項值了。

        

        在網(wǎng)站主頁做了一次讀取設置項中的值,直接讀取的是更新后的公司名和公司地址了。
      @using Partner.Surround.Configuration @{ var companyName = await
      SettingManager.GetSettingValueForApplicationAsync(AppSettingNames.HostManagement.CompanyName);
      var companyAddress = await
      SettingManager.GetSettingValueForApplicationAsync(AppSettingNames.HostManagement.CompanyAddress);
      }
        至此,設置管理的頁面配置完成了,當前設置主要是對應用層級的設置,對用戶這一級沒有做太多展示,但是原理是一樣的,對于像分組設置,設置項描述等信息,
      可以在此基礎上進行擴展,畢竟身后有巨人。

        代碼地址:https://gitee.com/530521314/Partner.Surround.git
      <https://gitee.com/530521314/Partner.Surround.git>

      ?
      2019-08-11,望技術有成后能回來看見自己的腳步

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          超小超嫩国产合集六部 | 欧美偷拍一区二区三区 | 做爰高潮A片〈毛片〉 | 粉嫩小泬BBBB免费看china | 操逼网12 | 色吊操| 久久久久国产成人精品亚洲午夜 | 男女操逼高清网 | 我把寡妇摸高潮了 | 影音先锋资源在线观看 |