ASP.NET 5 入門 (2) – 自定義配置

 

ASP.NET 5 入門 (2) – 自定義配置

ASP.NET 5 理解和入門html

創建和開發ASP.NET 5 項目web

初步理解ASP.NET5的配置

正如個人第一篇文章ASP.NET 5 (vNext) 理解和概述 所說,ASP.NET 5的具備全新的配置機制,咱們能夠經過如下幾點來進行理解:sql

  1. 支持多種跨平臺的配置文件格式(如XML, Json, Ini和環境變量)
  2. 標準的配置文件如project.json再也不包括任何自定義的配置信息.
  3. 自定義的配置徹底由開發者另行創建和加載
  4. 自定義的配置信息能夠經過依賴注入向全項目發放

創建自定義配置文件

首先咱們在項目的根目錄加入自定義的配置文件,config.json和config.ini (這裏的文件名是能夠任意定義的).json

                       

Config.json的內容咱們模擬以下app

{
  "AppSettings": {
    "SiteTitle": "ASP.NET 5 Sample"
  },
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=ASPNET5;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
  }
}


Config.Ini的內容咱們模擬以下:函數

DefaultPage=index.html

 

加載配置文件

以前也曾經提過,咱們通常經過Startup類的構造函數來加載配置文件. Startup類的配置文件通常這樣定義.ui

 

     public Startup(IHostingEnvironment env)
      {
      }


在最小模板,若是讀取Json和ini文件,咱們須要加入ConfigurationModel.Json的組件:spa

 

而後咱們能夠加入下面的代碼來讀取任意json文件,ini文件和系統環境變量code

      public Startup(IHostingEnvironment env)
        {
            // 加載自定義的Json配置文件和INI配置文件
            var configuration = new Configuration()
                .AddJsonFile("config.json")
                .AddIniFile("config.ini");

            //加入系統的環境變量
            configuration.AddEnvironmentVariables();
        }

 

使用配置信息

加載完畢之後,利用上述代碼中產生的configuration變量就能很方便的讀取各類配置信息,這裏提醒下,在以對象結構保存的配置信息中, Configuration類用」:」來實現對對象屬性的導航,不太理解的能夠看下面的代碼:htm

 

           //嘗試輸出一些配置信息
            //對應config.json的Data.DefaultConnection.ConnectionString
            Console.WriteLine(configuration["Data:DefaultConnection:ConnectionString"]);
            //對應config.ini的DefaultPage
            Console.WriteLine(configuration["DefaultPage "]);
            //對應系統環境裏面的Path
            Console.WriteLine(configuration["Path"]);

 

 

裝載配置到環境容器

在Startup類中,咱們能夠很方便的經過一個成員變量來傳遞的configuration變量,比較常見的寫法能夠相似下面的代碼

        private IConfiguration Configuration { get; set; }
        public Startup(IHostingEnvironment env)
        {
            // 加載自定義的Json配置文件和INI配置文件
            var configuration = new Configuration()
                .AddJsonFile("config.json")
                .AddIniFile("config.ini");
            //加入系統的環境變量
            configuration.AddEnvironmentVariables();
            //賦值給成員變量
            Configuration = configuration;
        }

 

但若是在整個項目中,就須要利用依賴注入技術把配置信息裝載到環境容器中去,才能在整個項目中被靈活的調用.

在我前一篇博文關於啓動類的描述中,曾經說起 Startup的ConfigureServices函數就是負責裝載全部依賴注入服務的函數,因此咱們須要在那裏加入裝載代碼:

      public void ConfigureServices(IServiceCollection services)
        {
            //把Configuration對象放入服務容器
            services.AddInstance(typeof(IConfiguration), Configuration);
        }


注意這裏的Configration是成員變量.

在其餘區域使用配置

如何在項目的其餘地方使用配置信息呢? 針對ASP.NET 5的依賴注入方式,咱們通常有2種選擇.

  1. 經過擴展任何在同一容器中的對象的構造函數的參數,來隱式的加載其餘服務元素,這種方式略有晦澀,但很是簡潔.(這種方式將在之後的MVC 6和EF 7介紹中再着重討論)
  2. 經過當前上下文(在不少場合均可以經過咱們的老朋友HttpContext獲取)中的ApplicationServices屬性,獲取相對應的服務元素.

這裏咱們尚未加載MVC或者EF,咱們就以Startup類的Configure函數來作一個示範:

第一種模式代碼示例:

      public void Configure(IApplicationBuilder app,IConfiguration configuration)
        {
            //從當前容器中讀出配置信息
            Console.WriteLine(configuration["DefaultPage"]);
            Console.WriteLine(configuration["AppSettings:SiteTitle"]);

        }


注意, IConfiguration configuration參數的隱式 轉換是由於以前咱們已經把Configuration加入Service容器. 若是沒有以前的註冊,這裏的代碼會報錯.

第二種模式代碼示例:

 

       public void Configure(IApplicationBuilder app)
        {
             var configuration = (IConfiguration)app.ApplicationServices.GetService(typeof(IConfiguration));
            //從當前容器中讀出配置信息
            Console.WriteLine(configuration["DefaultPage"]);
            Console.WriteLine(configuration["AppSettings:SiteTitle"]);
        }


在後續的常見對象裏,好比MVC的Controller,和EF的DbContext等,咱們可以很便利的利用這2種方式獲取整個項目的配置信息.

 好了,利用上面說到的方法,咱們已經能夠很是靈活在ASP.NET 5項目中,設置配置文件,加載配置文件,和使用配置信息,並且基於MVC服務,咱們還能夠對配置信息進行進一步的封裝,

ASP.NET5的配置機制是否是很方便. 還有人想念web.config嗎?

相關文章
相關標籤/搜索