Aso.Net Core 的配置系统Configuration--转
Aso.Net Core 的配置系统Configuration
1.以前的配置文件格式为XML
2.新版的配置文件格式支持 { json ,xml, ini, memory, command, env..... }
01.Json文件的弱类型方式读取
-
Json文件 【Microsoft.Extensions.Configuration.Json】
-
添加配置文件json文件,并设置内容
{ "DataBase": { "SqlServer": { "ConnectionString": "server=.;database=testdb;uid=sa;pwd=123;" }, "MySql": { "IpAddress": "127.0.0.1", "port": 3306 } }, "endArray": [ { "endId": 20 }, { "endId": "30" } ] }
-
获取数据
private static void Main(string[] args) { IConfiguration configuration = new ConfigurationBuilder() .SetBasePath(Environment.CurrentDirectory) .AddJsonFile("AppSettings.json",true,true) .AddInMemoryCollection() .Build(); var str1 = configuration["DataBase:SqlServer:ConnectionString"]; var str2 = configuration["endArray:0:endId"]; Console.WriteLine($"{str1}+---{str2}"); }
02.Json文件的强类型获取方式
1.添加引用【Microsoft.Extensions.Configuration.Binder】
2.GetValue方式获取
private static void Main(string[] args) { IConfiguration configuration = new ConfigurationBuilder() .SetBasePath(Environment.CurrentDirectory) .AddJsonFile("AppSettings.json",true,true) .AddInMemoryCollection() .Build(); //GetValue获取方式 int val = configuration.GetValue<int>("endArray:0:endId"); Console.WriteLine(val); }
3.实体映射方式private static void Main(string[] args)
{ IConfiguration configuration = new ConfigurationBuilder() .SetBasePath(Environment.CurrentDirectory) .AddJsonFile("AppSettings.json",true,true) .AddInMemoryCollection() .Build(); //Bind 获取方式 Root root=new Root(); configuration.Bind(root); var ip = root.DataBase.MySql.IpAddress; var entid = root.endArray[0].endId; Console.WriteLine($"{ip}{entid}"); //Get<T> 获取 var root = configuration.Get<Root>(); var ip = root.DataBase.MySql.IpAddress; var entid = root.endArray[0].endId; Console.WriteLine($"{ip}{entid}");
} //这里是实体类 public class SqlServer { /// <summary> /// /// </summary> public string ConnectionString { get; set; } } public class MySql { /// <summary> /// /// </summary> public string IpAddress { get; set; } /// <summary> /// /// </summary> public int port { get; set; } } public class DataBase { /// <summary> /// /// </summary> public SqlServer SqlServer { get; set; } /// <summary> /// /// </summary> public MySql MySql { get; set; } } public class EndArray { /// <summary> /// /// </summary> public int endId { get; set; } } public class Root { /// <summary> /// /// </summary> public DataBase DataBase { get; set; } /// <summary> /// /// </summary> public List<EndArray> endArray { get; set; } }
补充:IConfiguration.Get<T>()即可获得实体,所以我们无需从根获取起,如获取SQL的连接串,也可以这样写:
1、configuration.GetSection("DataBase").Get<DataBase>().SqlServer.ConnectionString;
2、configuration.GetSection("DataBase").GetSection("SqlServer").Get<SqlServer>().ConnectionString;
等等。
针对经常要使用的情形,建议将其纳入IOC
services.Configure<DataBase>(Configuration.GetSection("DataBase"));
这会将其设置为一个单例注入到容器中。