【無私分享:ASP.NET CORE 項目實戰(第八章)】讀取配置文件(二) 讀取自定義配置文件

 

目錄索引 

 

【無私分享:ASP.NET CORE 項目實戰】目錄索引html

 

簡介

 

  咱們在 讀取配置文件(一) appsettings.json 中介紹了,如何讀取appsettings.json. json

  但隨之產生了問題:咱們使用的是在 Startup.cs 中(以下圖)來實現配置讀取,有兩個問題 ① 咱們若是定義N種配置,是否要再這裏添加N條這樣的配置② 若是咱們的配置不想寫在appsettings.json中呢 app

  

  

 

 

 

解決問題

 

  帶着上面的兩個問題,咱們首先來添加一個配置文件 siteconfig.jsonide

  

  {
    "SiteBaseConfig": {
      //文件上傳路徑
      "FileUpPath": "/upload/",
      //是否啓用單用戶登陸
      "IsSingleLogin": "True",
      //容許上傳的文件格式
      "AttachExtension": "gif,jpg,jpeg,png,bmp,rar,zip,doc,docx,xls,xlsx,ppt,pptx,txt,flv,apk,mp4,mpg,ts,mpeg,mp3,bak,pdf",
      //圖片上傳最大值KB
      "AttachImagesize": 12400
    }
  }post

 

咱們在 讀取文件配置(一)中的配置類 ApplicationConfiguration學習

 

 1 public class ApplicationConfiguration
 2     {
 3         #region 屬性成員
 4 
 5         /// <summary>
 6         /// 文件上傳路徑
 7         /// </summary>
 8         public string FileUpPath { get; set; }
 9         /// <summary>
10         /// 是否啓用單用戶登陸
11         /// </summary>
12         public bool IsSingleLogin { get; set; }
13         /// <summary>
14         /// 容許上傳的文件格式
15         /// </summary>
16         public string AttachExtension { get; set; }
17         /// <summary>
18         /// 圖片上傳最大值KB
19         /// </summary>
20         public int AttachImagesize { get; set; }
21         #endregion
22     }

 

 

  project.json 的 buildOptions 添加 "copyToOutput": "siteconfig.json",讓該文件在編譯的時候自動拷貝到輸出目錄下(默認爲bin目錄):測試

 

  

 

修改  讀取文件配置(一) 的領域層 AppConfigurtaionServicesui

 

  public class AppConfigurtaionServices
  {
    url

    public T GetAppSettings<T>(string key)where T:class,new()
    {
      IConfiguration config = new ConfigurationBuilder()
                  .Add(new JsonConfigurationSource { Path= "siteconfig.json", ReloadOnChange=true })
                  .Build();spa

 

      var appconfig= new ServiceCollection()
              .AddOptions()
              .Configure<T>(config.GetSection(key))
              .BuildServiceProvider()
              .GetService<IOptions<T>>()
              .Value;

 

      return appconfig;
    }

 

  }  

  

  說明:咱們首先建立了一個ConfigurationBuilder對象,並在它上面註冊了一個JsonConfigurationSource。在建立這個JsonConfigurationSource對象的時候,除了指定配置文件(「siteconfig.json」)的路徑以外,咱們還將它的 ReloadOnChange 屬性設置爲True。這個ReloadOnChange屬性的含義就是當原始配置文件的內容發生改變的時候是否須要從新加載配置。

 

  這時候咱們會發現 Configure<T>(config.GetSection(key)) 報錯:

 

 

  我查看了咱們以前在Startup中的 services.Configure<T>() 發現,這個裏面的參數是有兩個重載的 一個是 IConfiguration 一個是 System.Action<T>,那麼爲何這裏重載不出來了呢?

 

   十分不解,最後發現是少了擴展類 Microsoft.Extensions.Options.ConfigurationExtensions

 

  咱們經過 NuGet 添加這個 Install-Package Microsoft.Extensions.Options.ConfigurationExtensions  問題獲得解決,在此感謝 @Artech

 

  咱們來測試一下:

  

  

 

 

  OK,這樣,咱們在文章開始提出的兩個問題就都獲得瞭解決!

 

 

 

 

 

但願跟你們一塊兒學習Asp.net Core 

剛開始接觸,水平有限,不少東西都是本身的理解和翻閱網上大神的資料,若是有不對的地方和不理解的地方,但願你們指正!

雖然Asp.net Core 如今很火熱,可是網上的不少資料都是前篇一概的複製,因此有不少問題我也暫時沒有解決,但願你們能共同幫助一下!

 

原創文章 轉載請尊重勞動成果 http://yuangang.cnblogs.com

相關文章
相關標籤/搜索