Aso.Net Core 的配置系统Configuration--转

Aso.Net Core 的配置系统Configuration

​ 1.以前的配置文件格式为XML

​ 2.新版的配置文件格式支持 { json ,xml, ini, memory, command, env..... }

01.Json文件的弱类型方式读取

  1. Json文件 【Microsoft.Extensions.Configuration.Json】

  2. 添加配置文件json文件,并设置内容

    {
      "DataBase": {
        "SqlServer": {
          "ConnectionString": "server=.;database=testdb;uid=sa;pwd=123;"
        },
        "MySql": {
          "IpAddress": "127.0.0.1",
          "port": 3306
        }
      },
      "endArray": [
        { "endId": 20 },
        { "endId": "30" }
      ]
    }

     

  3. 获取数据

    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"));

这会将其设置为一个单例注入到容器中。

 
 
posted @ 2019-12-03 09:22  邑尘  阅读(453)  评论(0编辑  收藏  举报