zoukankan      html  css  js  c++  java
  • ASP.NET Core 配置与获取


    ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建。
    主要分为三部:配置数据源 -> ConfigurationBuilder -> 使用。
    数据源可来自字典或配置文件。

    数据源要么继承 IConfigurationSource ,要么从配置文件中读取。

    1,来自字典

    我们先使用字典存储键值对,来设置配置, test = 配置,然后使用 ConfigurationBuilder.Add() 方法添加数据源, Add 方法可以添加继承了 IConfigurationSource 的数据源。

    MemoryConfigurationSource 继承了 IConfigurationSource ,使用字典作为数据源。

                var dic = new Dictionary<string, string>()
                {
                    ["test"] = "配置"
                };
                var config = new ConfigurationBuilder()
                    .Add(new MemoryConfigurationSource() { InitialData = dic }).Build();
                string test = config["test"];
    

    老是 new 不太爽,可以使用下面的方法来读取字典中的数据源:

                var dic = new Dictionary<string, string>()
                {
                    ["test"] = "配置"
                };
                var config = new ConfigurationBuilder()
                    .AddInMemoryCollection(dic)
                    .Build();
                string test = config["test"];
    

    2,来自配置文件

    假如在 项目根目录下创建一个 json 文件,内容如下:

    {
    "test":"配置"
    }
    

    那么可以这样读取配置:

                var config = new ConfigurationBuilder()
                    .AddJsonFile("test.json")
                    .Build();
                string test = config["test"];
                Console.WriteLine(test);
    

    如果配置文件不在根目录下,则可以使用 SetBasePath() 来定义路径,示例如下:

                var config = new ConfigurationBuilder()
                    .SetBasePath("E:\test\aaa")
                    .AddJsonFile("test.json")
                    .Build();
    

    上面看到,获取配置项是非常简单的, config["{KeyName}"] 即可获得 value

    另外,可以监控 json 文件,当 json 文件发生更改时,主动更新。

                    config.AddJsonFile("appsettings.json", 
                        optional: true, 
                        reloadOnChange: true);
    

    3,层次结构

    配置数据源可以有层次结构。
    ASP.NET Core 中,都会有个 appsettings.json 文件,其内容如下:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      }
    }
    

    那么我们使用时,可以使用 : 符号获取下一层子项的配置。

                var config = new ConfigurationBuilder()
                    .AddJsonFile("appsettings.json")
                    .Build();
    
                string test = config["Logging:LogLevel:Default"];
    

    如果你只想 获取 json 文件中 LogLevel 部分的配置,可以使用 GetSection() 方法。

                var config = new ConfigurationBuilder()
                    .AddJsonFile("appsettings.json")
                    .Build()
                    .GetSection("Logging:LogLevel");
    
                string test = config["Default"];
    

    通过 json 配置文件,我们可以很方便地构建层级结构的配置,如果想在字典中存储,可以使用 "{k1}:{k2}" 这种形式存。例如:

                var dic = new Dictionary<string, string>()
                {
                    ["testParent:Child1"] = "6",
                    ["testParent:Child2"] = "666"
                };
                var config = new ConfigurationBuilder()
                    .AddInMemoryCollection(dic)
                    .Build().GetSection("testParent");
    
                string test = config["Child1"];
    

    4,映射

    我们可以使用 Get<>() 方法,将配置映射为对象。

        public class TestOptions
        {
            public string A { get; set; }
            public string B { get; set; }
            public string C { get; set; }
        }
    
                var dic = new Dictionary<string, string>()
                {
                    ["A"] = "6",
                    ["B"] = "66",
                    ["C"] = "666"
                };
                TestOptions config = new ConfigurationBuilder()
                    .AddInMemoryCollection(dic)
                    .Build().Get<TestOptions>();
    

    你也可以参考 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1#getsection-getchildren-and-exists

  • 相关阅读:
    SonarQube+Jenkins代码审查集成CI/CD
    “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决
    ORA-31687: error creating worker process with worker id 1
    Oracle修改表列长度
    RouYi(Export excel)
    Spring事务失效的原因
    Linux/Keychron键盘 功能键F1-F12映射修复
    git 推送本地文件到远程仓库
    git remote 删除已添加的远程仓库地址
    mssql新建数据库
  • 原文地址:https://www.cnblogs.com/whuanle/p/13061059.html
Copyright © 2011-2022 走看看