zoukankan      html  css  js  c++  java
  • .NET Core 配置Configuration杂谈

    前言

    .NET Core 在配置文件的操作上相对于.NET Framework做了不少改变,今天来聊一聊。关于Configuration的Package都是以Microsoft.Extensions.Configuration开头的支持多种方式的配置,包括内存、Json文件、XML文件等等,今天我们主要用Json格式文件配置来演示。

    开始

    新建一个ConsoleApp(这里为了方便演示就用控制台程序来演示了,而不用ASP.NET Core),添加两个Package:

    Install-Package Microsoft.Extensions.Configuration -Version 2.0.1
    Install-Package Microsoft.Extensions.Configuration.Json -Version 2.0.1
    

    添加Json配置文件,读取配置

    var builder = new ConfigurationBuilder()
    	.SetBasePath(Directory.GetCurrentDirectory())
    	.AddJsonFile("appsettings.json");
    
    var config = builder.Build();
    
    //读取配置
    Console.WriteLine(config["Alipay:AppId"]);
    Console.WriteLine(config["Alipay:PriviteKey"]);
    

    我们的Json文件内容如下:

    {
      "Alipay": {
        "AppId": "20185555",
        "PriviteKey": "dasfdafafafa"
      } 
    }
    

    我们通过ConfigurationBuilder对象来创建ConfigurationRoot对象,并用其来读取配置。SetBasePath()方法是用来设置我们配置对象需要的配置文件的基础路径,比如我们将基础路径设置为C:ConsoleApp,那么他读取我们的配置文件appsettings.json的路径将是C:ConsoleAppappsettings.json

    运行:

    多次调用 AddJsonFile 方法会发生什么

    我们新建一个appsettings.Test.json文件,添加如下内容:

    {
      "Alipay": {
        "AppId": "20185555Testss",
        "PriviteKey": "dasfdafafafaTestss"
      } 
    }
    

    然后修改一下代码:

    var builder = new ConfigurationBuilder()
    	.SetBasePath(Directory.GetCurrentDirectory())
    	.AddJsonFile("appsettings.json")
    	.AddJsonFile("appsettings.Test.json");
    

    可以看见我们向ConfigurationBuilder对象设置了两次Json文件,看一下运行效果:

    可以得出结论:读取配置的时候会选择最后添加的文件。

    那么我们前一个文件去哪了呢?我们的ConfigurationRoot对象有一个Providers属性存储了,我们添加的文件信息,我们可以遍历它:

    foreach (var provider in config.Providers)
    {
    	provider.TryGet("Alipay:AppId", out string val);
    
    	Console.WriteLine(val);
    }
    

    运行:

    可以看出我们两个文件的值都被读取到了!

    配置重载

    我们的配置文件可能会被更改,那么我们如何获取最新的配置?我们在添加文件的时候可以将一个名为reloadOnChange的参数设置为true,那么当我们的文件发生更改时,就会重新载入配置到内存中来,然后我们获取到的配置就行最新的。我们读取配置的时候并不是每次读取都是从文件里面读取,而是配置文件的所有配置信息都会被加载到内存中来,我们每次从内存读取就行了。

    
    var builder = new ConfigurationBuilder()
    	.SetBasePath(Directory.GetCurrentDirectory())
    	.AddJsonFile("appsettings.json")
    	.AddJsonFile("appsettings.Test.json",true,reloadOnChange:true);
    
    var config = builder.Build();
    
    //读取配置
    Console.WriteLine(config["Alipay:AppId"]);
    Console.WriteLine(config["Alipay:PriviteKey"]);
    
    Console.WriteLine("更改文件之后,按下任意键");
    Console.ReadKey();
    
    Console.WriteLine("change:");
    Console.WriteLine(config["Alipay:AppId"]);
    Console.WriteLine(config["Alipay:PriviteKey"]);
    
    Console.ReadKey();
    

    我们看一下效果:

    今天就到这里了!

    Demo:https://github.com/stulzq/BlogDemos/tree/master/ConfigurationTest

  • 相关阅读:
    [LeetCode] 199. Binary Tree Right Side View
    [LeetCode] 360. Sort Transformed Array
    [LeetCode] 146. LRU Cache
    [LeetCode] 28. Implement strStr()
    [LeetCode] 498. Diagonal Traverse
    [LeetCode] 545. Boundary of Binary Tree
    [LeetCode] 937. Reorder Data in Log Files
    软件开发之我剑!软件测试, 房子的刚性需求【原】
    c#调用Delphi的dll函数遇到的问题及解决方法
    C# 回调函数
  • 原文地址:https://www.cnblogs.com/stulzq/p/8570496.html
Copyright © 2011-2022 走看看