十年河東,十年河西,莫欺少年窮
學無止境,精益求精
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 }); } } }
可參考微軟教程:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
@天才卧龍的博客