前面寫過一篇《.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.config
或Web.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) + 准備項目