.NET Core 讀取配置文件


前面寫過一篇《.NET Core類庫中讀取配置文件》 ,當時對於.NET Core讀取配置文件了解有限,這里做下補充:

配置文件內容如下:

{
  "url": "homeinns.com",
  "person": {
    "name": "xfh",
    "age": 26
  }
}

引用Microsoft.Extensions.Configuration.Json

using System;
using System.Configuration;
using System.IO;
using Microsoft.Extensions.Configuration;


namespace coreapp
{
    class Program
    {
        /// <summary>
        /// 加載配置文件,構建IConfigurationRoot
        /// </summary>
        private static readonly IConfigurationBuilder ConfigurationBuilder = new ConfigurationBuilder();

        /// <summary>
        /// 獲取配置文件中的內容,繼承自IConfiguration
        /// </summary>
        private static IConfigurationRoot _configuration;

        static void Main(string[] args)
        {
            _configuration = ConfigurationBuilder
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(cfg =>
                {
                    cfg.Path = "config.json";
                    cfg.ReloadOnChange = true;
                    cfg.Optional = false;
                })
                //Build方法的調用要在AddJsonFile之后,否則生成的IConfigurationRoot實例的
                //Providers屬性不包含任何元素而導致無法讀取文件中的信息
                .Build();

            var url = _configuration.GetSection("url");
            //讀取json對象,在IConfiguration中,配置文件中的key都是扁平化的
            var pAge = _configuration["person:age"];

           //遍歷配置文件中的所有元素
            foreach (var keyValuePair in _configuration.AsEnumerable())
            {
                Console.WriteLine($"{keyValuePair.Key} - {keyValuePair.Value}");
            }

        }
    }
}

還可以將文件內容映射到對象上,需額外引用Microsoft.Extensions.Configuration.Binder包:

class ConfigModel
{
    public string Url { set; get; }
    public Person Person { set; get; }
}
public class Person
{
    public string Name { set; get; }
    public int Age { set; get; }
}

var configModel = new ConfigModel();
ConfigurationBuilder.Build().Bind(configModel);

 

在ASP.NET Core中,還可以使用IOptions<T>來獲取配置信息,但當配置文件被修改時,IOptions<T>中的內容並不會發生改變,不過可以使用IOptionsSnapshot來解決這個問題。

public IConfigurationRoot Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ConfigModel>(Configuration);
}

//然后通過IoC獲取IOptions<T>
public void Method(IOptions<ConfigModel> opt)
{

}

 

以上,是對json文件的操作,接下來操作xml文件。


若要像在.NET Framework中那樣讀取讀取App.configWeb.config,引入System.Configuration.ConfigurationManager包即可:

var value = ConfigurationManager.AppSettings["key"];
Console.WriteLine(value);
Console.WriteLine(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);

 

或者,引用Microsoft.Extensions.Configuration.Xml包,

_configuration = ConfigurationBuilder
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddXmlFile("App.config")
    .Build();
//不如使用ConfigurationManager方便了,在appSettings節點下添加多個key還會導致讀取時拋異常
var value = _configuration.GetSection("appSettings:add:value").Value;

推薦閱讀

用ASP.NET Core 2.0 建立規范的 REST API -- 預備知識 (2) + 准備項目

ASP.NET Core Get Json Array using IConfiguration

Configuration in ASP.NET Core

版權聲明

本文為作者原創,版權歸作者雪飛鴻所有。 轉載必須保留文章的完整性,且在頁面明顯位置處標明原文鏈接。

如有問題, 請發送郵件和作者聯系。


免責聲明!

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



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