.net core config读取

2018-01-09  本文已影响0人  Lulus

最简单的方式

引用

Microsoft.Extensions.Configuration     
Microsoft.Extensions.Configuration.Json      

json文件

新建一个ConfigTest.json
右键属性,设置为“始终复制”
数据如下:

{
  "TotalCount": 2,
  "Students": [
    {
      "Name": "Lili",
      "Sex": "女"
    },
    {
      "Name": "Tom",
      "Sex": "男"
    }
  ]
}

读取json

var builder = new ConfigurationBuilder();
builder.AddJsonFile("ConfigTest.json");
var config = builder.Build();
Console.WriteLine(config["TotalCount"]);
//索引
Console.WriteLine(config["Students:0:Name"]);
Console.WriteLine(config["Students:0:Sex"]);
Console.WriteLine(config["Students:1:Name"]);
Console.WriteLine(config["Students:1:Sex"]);

示例代码

https://github.com/zLulus/NotePractice/blob/dev3/Website/DotNetCore/CoreConsole/Config/ConfigReadDemo.cs 的ReadConfig方法

Bind读取配置

引用

第一个示例中的引用也要添加

Microsoft.Extensions.Configuration.Binder

读取json

var builder = new ConfigurationBuilder()
    .AddJsonFile("ConfigTest.json");
ConfigTest configTest=new ConfigTest();
var config = builder.Build();
//Microsoft.Extensions.Configuration.Binder
config.Bind(configTest);
Console.WriteLine(configTest.TotalCount);
Console.WriteLine(configTest.Students[0].Name);
Console.WriteLine(configTest.Students[0].Sex);
Console.WriteLine(configTest.Students[1].Name);
Console.WriteLine(configTest.Students[1].Sex);

示例代码

https://github.com/zLulus/NotePractice/blob/dev3/Website/DotNetCore/CoreConsole/Config/ConfigReadDemo.cs 的ReadConfigByBind方法

Option

引用

第一个示例中的引用也要添加

Microsoft.Extensions.Options

在appsettings.json中添加测试数据

{
  "MyData": {
    "TotalCount": 2,
    "Students": [
      {
        "Name": "Lili",
        "Sex": "女"
      },
      {
        "Name": "Tom",
        "Sex": "男"
      }
    ]
  } 
}

实体类需要实现IOptions<T>

public class ConfigTest:IOptions<ConfigTest>
{
    public int TotalCount { get; set; }
    public List<Student> Students { get; set; }
    public ConfigTest Value => this;
}

读取json

public class ConfigController : Controller
{
    private ConfigTest _configTestByOptions;
    private readonly IConfiguration _configuration;
    public ConfigController(IConfiguration configuration)
    {
        _configuration = configuration;
    }
    public IActionResult Index()
    {
        //GetSection:必须先读节点
        //ConfigTest实现接口IOptions<ConfigTest>
        _configTestByOptions = _configuration.GetSection("MyData").Get<ConfigTest>();
        return View();
    }
}

注意

CreateDefaultBuilder方法已经读取appsettings.json,所以在这个示例中,我们没有调用AddJsonFile方法添加appsettings.json文件,而是直接读取appsettings.json中的数据即可

public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();

示例代码

https://github.com/zLulus/NotePractice/blob/dev3/Website/DotNetCore/CoreWebsite/Controllers/ConfigController.cs

热更新

定义

optional:该配置文件是否可选,如果optional=false,加载失败会抛出异常
reloadOnChange:文件被修改时是否重新加载,热更新就是这个,设置为true即可

public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, string path, bool optional, bool reloadOnChange)

注意,热更新是修改bin目录下的生成的文件

示例代码

https://github.com/zLulus/NotePractice/blob/dev3/Website/DotNetCore/CoreConsole/Config/ConfigReadDemo.cs 的ReadConfigHotUpdate方法

上一篇下一篇

猜你喜欢

热点阅读