NetCore 配置文件---直接讀取及選項模式讀取


十年河東,十年河西,莫欺少年窮

學無止境,精益求精

1、如果項目中沒有操作配置文件相關的包,請執行如下PM命令:

Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Json

2、NetCore中讀取配置文件,分為:直接通過鍵值對的模式讀取,另一種就是選項模式,所謂的選項模式,是將講配置文件中的配置轉化為相關類,然后讀取類中的屬性即可完成讀取配置文件。

本例中以NetCore Web MVC 應用程序來說明,目錄如下(其實只用到WebApplication1項目):

 新建完MVC項目后,我們來完善下我們的配置文件:appsettings.json ,如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "StudentDBContext": "Data Source=DESKTOP-VD79APR\\SQLEXPRESS;Initial Catalog=StudentDB;User ID=sa;Password=cch@225836.sa;"
  },
  "Zoon": {
    "CatZoon": {
      "Cat": "小花貓",
      "Lion": "獅子",
      "Triger": "老虎",
      "Leopard": "花豹"
    },

    "DogZoon": {
      "Dog": "小花狗",
      "Wolf": ""
    }
  }
}

首先,我們需要將配置文件接口注入到控制器中

        private readonly ILogger<HomeController> _logger;
        private IConfigurationRoot ConfigRoot;
        private readonly ZoonOptions _options;

        public HomeController(ILogger<HomeController> logger, IConfiguration configRoot, IOptions<ZoonOptions> options)
        {
            _options = options.Value;
            ConfigRoot = (IConfigurationRoot)configRoot;
            _logger = logger;
        }

直接讀取,很簡單,通過鍵值對讀取即可,如下:

            //基本讀取 : 會讀取在應用啟動后對 JSON 配置文件所做的更改
            var cat = ConfigRoot["Zoon:CatZoon:Cat"];
            ViewBag.cat = cat;

注:當程序發布運行后,配置文件改變,讀取的結果會相應改變。

選項模式

1、選項模式中,類名的命名規則為配置塊根節點的名稱 加 Options

2、選項模式中必須聲明和配置塊根節點名稱一致的變量及值

下面我們將通過選項模式讀取 Zoon 節點下的屬性節點,要想使用選項模式,就必須創建一個和 Zoon 節點配置塊相同結構的類,因此,我們需要創建如下類:

namespace WebApplication1.Models
{
    /// <summary>
    /// 選項模式中,類名的命名規則為配置塊根節點的名稱 加 Options
    /// </summary>
    public class ZoonOptions
    {
        public ZoonOptions()
        {
            CatZoon = new CatZoon();
            DogZoon = new DogZoon();
        }
        /// <summary>
        /// 選項模式中必須聲明和配置塊根節點名稱一致的變量及值
        /// </summary>
        public const string Zoon = "Zoon";
        public CatZoon CatZoon { get; set; }
        public DogZoon DogZoon { get; set; }
    }

    public class CatZoon
    {
        public string Cat { get; set; }
        public string Lion { get; set; }
        public string Triger { get; set; }
        public string Leopard { get; set; }
    }
    public class DogZoon
    {
        public string Dog { get; set; }
        public string Wolf { get; set; }

    }
}

基本的選項模式有兩個方法讀取配置文件,一個是Bind()方法,一個是Get()方法,如下:

            //選項模式 Bind : 會讀取在應用啟動后對 JSON 配置文件所做的更改
            var ZoonOptions = new ZoonOptions();
            ConfigRoot.GetSection(ZoonOptions.Zoon).Bind(ZoonOptions);
            var Triger = ZoonOptions.CatZoon.Triger;
            ViewBag.Triger = Triger;
            var Dog = ZoonOptions.DogZoon.Dog;
            ViewBag.Dog = Dog;
            //選項模式 Get :會讀取在應用啟動后對 JSON 配置文件所做的更改
            var ZoonOptions_Get = ConfigRoot.GetSection(ZoonOptions.Zoon)
                                                    .Get<ZoonOptions>();
            ViewBag.Lion = ZoonOptions_Get.CatZoon.Lion;
            ViewBag.Wolf = ZoonOptions_Get.DogZoon.Wolf;

注:無論是GET()方法,還是Bind()方法,當程序發布運行后,配置文件改變,讀取的結果會相應改變。

當然,選項模式也支持在Strat.Up 啟動類中注冊,並全局使用,如下:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            //選項模式注冊
            services.Configure<ZoonOptions>(Configuration.GetSection(
                                       ZoonOptions.Zoon));
            //services.AddRazorPages();

        }

然后,就可以進行依賴注入了,

        private readonly ILogger<HomeController> _logger;
        private IConfigurationRoot ConfigRoot;
        private readonly ZoonOptions _options;

        public HomeController(ILogger<HomeController> logger, IConfiguration configRoot, IOptions<ZoonOptions> options)
        {
            _options = options.Value;
            ConfigRoot = (IConfigurationRoot)configRoot;
            _logger = logger;
        }

讀取配置文件如下:

            //選項模式 依賴注入 :不會讀取在應用啟動后對 JSON 配置文件所做的更改
            ViewBag.Leopard = _options.CatZoon.Leopard;

OK截止到這兒,讀取配置文件就結束了。

 最后貼出全部控制器代碼,如下:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private IConfigurationRoot ConfigRoot;
        private readonly ZoonOptions _options;

        public HomeController(ILogger<HomeController> logger, IConfiguration configRoot, IOptions<ZoonOptions> options)
        {
            _options = options.Value;
            ConfigRoot = (IConfigurationRoot)configRoot;
            _logger = logger;
        }

        public IActionResult Index()
        {
            //基本讀取 : 會讀取在應用啟動后對 JSON 配置文件所做的更改
            var cat = ConfigRoot["Zoon:CatZoon:Cat"];
            ViewBag.cat = cat;
            //選項模式 Bind : 會讀取在應用啟動后對 JSON 配置文件所做的更改
            var ZoonOptions = new ZoonOptions();
            ConfigRoot.GetSection(ZoonOptions.Zoon).Bind(ZoonOptions);
            var Triger = ZoonOptions.CatZoon.Triger;
            ViewBag.Triger = Triger;
            var Dog = ZoonOptions.DogZoon.Dog;
            ViewBag.Dog = Dog;
            //選項模式 Get :會讀取在應用啟動后對 JSON 配置文件所做的更改
            var ZoonOptions_Get = ConfigRoot.GetSection(ZoonOptions.Zoon)
                                                    .Get<ZoonOptions>();
            ViewBag.Lion = ZoonOptions_Get.CatZoon.Lion;
            ViewBag.Wolf = ZoonOptions_Get.DogZoon.Wolf;
            //選項模式 依賴注入 :不會讀取在應用啟動后對 JSON 配置文件所做的更改
            ViewBag.Leopard = _options.CatZoon.Leopard;
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}
View Code

可參考微軟教程:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1

@天才卧龍的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM