配置文件
.NET 中的配置系统支持丰富的配置源,包括文件(json、xml、ini等)、注册表、环境变量、命令行、阿波罗等,还可以配置自定义配置源。可以跟踪配置的改变,可以按照优先级覆盖。
通过Json文件配置
安装对应包
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Json
Install-Package Microsoft.Extensions.Configuration.Binder
using Microsoft.Extensions.Configuration; using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddJsonFile("Myconfig.json", optional: true, reloadOnChange: true); var configRoot = configurationBuilder.Build(); string name = configRoot["Name"]; Console.WriteLine(name); string address = configRoot.GetSection("Other:Address").Value; Console.WriteLine(address); var other = configRoot.GetSection("Other").Get原始读取方式(); Console.WriteLine(other.Tel); var myConfig = configRoot.Get (); Console.WriteLine(myConfig.Name); } } class MyConfig { public string Name { get; set; } public string Age { get; set; } public Other Other { get; set; } } class Other { public string Address { get; set; } public string Tel { get; set; } } }
选项方式读取,和DI结合更好,且更好利用”reloadonchange“机制
安装对应包
Install-Package Microsoft.Extensions.Options
相关概念
DI要声明 IOptions
IOptions不会读取到新的值 和IOptionsMonitor相比,IOptionsSnapshot会在同一范围内保持一致,建议使用IOptionsSnapshot
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { var services = new ServiceCollection(); services.AddScoped结合DI读取配置-1(); ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddJsonFile("Myconfig.json", optional: true, reloadOnChange: true); var configRoot = configurationBuilder.Build(); services.AddOptions().Configure (e=>configRoot.Bind(e)); using (var sp = services.BuildServiceProvider()) { var dIConfigClass = sp.GetRequiredService (); dIConfigClass.Test(); } } } public class MyConfig { public string Name { get; set; } public string Age { get; set; } public Other Other { get; set; } } public class Other { public string Address { get; set; } public string Tel { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Options; namespace ConsoleApp1 { public class DIConfigClass { public readonly IOptionsSnapshot结合DI读取配置-2_optionsSnapshot; public DIConfigClass(IOptionsSnapshot optionsSnapshot) { _optionsSnapshot = optionsSnapshot; } public void Test() { Console.WriteLine(_optionsSnapshot.Value.Name); Console.ReadKey(); } } }