.NET Core配置框架及4种配置方式详解(下)

简介: 上一篇,我们学习了4种配置方式的内存配置和命令行配置方式,本篇,我们来学习另外2种方式:环境变量配置方式和文件提供程序方式。

环境变量配置方式


适用场景

  • Docker中
  • Kubernetes中
  • 需要设置ASP.NET Core的一些内置特殊配置时

特性

  • 对于配置的分层键,支持用双下划线“__”代替“:”
  • 支持根据前缀加载

引用包

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Abstractions
  • Microsft.Extensions.Configuration.EnvironmentVariables


代码演示

这里我们需要先准备测试数据

1694177984703.png

或者通过lanchSettings.json文件来配置


{
  "profiles": {
    "07_Configuration_Env": {
      "commandName": "Project",
      "environmentVariables": {
        "env1": "env1",
        "key2": "value2",
        "env1:key3": "value3",
        "env1__key4": "value4",
        "env1_": "env1_",
        "key1": "value1"
      }
    }
  }
}


通过以下方式开启环境变量配置方式


configurationBuilder.AddEnvironmentVariables();


测试代码如下


IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddEnvironmentVariables();
IConfigurationRoot configurationRoot = configurationBuilder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}");
Console.WriteLine($"key2:{configurationRoot["key2"]}");
IConfigurationSection section1 = configurationRoot.GetSection("env1");
Console.WriteLine($"key3:{section1["key3"]}");
Console.WriteLine($"key4:{section1["key4"]}");


这里我们可以发现,除了配置方式不同外,其他操作基本类似。


前缀过滤


环境变量配置方式提供了一种前缀过滤的方式,来允许我们只注册特定前缀的环境变量,而无需每次都全部注册,这种方式下,获取值时,其键值是以定义键去掉前缀之后的剩余串作为键值的。


开启环境变量配置时,传入一个参数作为前缀来对配置进行过滤。


configurationBuilder.AddEnvironmentVariables("env1");

这里,以"env1"来进行过滤演示,下面代码中我已经列出了全部可能的情况,请注意观察以便你理解。


configurationBuilder.AddEnvironmentVariables("env1");
IConfigurationRoot configurationRoot = configurationBuilder.Build();
Console.WriteLine($"env1:{configurationRoot[""]}");
Console.WriteLine($"env1_:{configurationRoot["_"]}");
Console.WriteLine($"env1:key3:{configurationRoot[":key3"]}");
Console.WriteLine($"env1__key4:{configurationRoot["__key4"]}");//不能获取,猜测__是环境变量独有的识别为section的方式,因此必须通过section获取
IConfigurationSection configurationSection = configurationRoot.GetSection("");
Console.WriteLine($"key3:{configurationSection["key3"]}");
Console.WriteLine($"key4:{configurationSection["key4"]}");


文件提供程序配置:自由选择配置的格式


种类

  • Microsoft.Extensions.Configuration.Ini
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Configuration.NewtonsoftJson
  • Microsoft.Extensions.Configuration.Xml
  • Microsoft.Extensions.Configuration.UserSecrets


特性

  • 可指定文件可选、必选:属性optional
  • 可指定是否监视文件的变更:属性reloadOnChange


代码示例

这里,我们以json和ini文件为例,先准备2个文件


{
  "key1": "value1",
  "key2": 0,
  "Section1": {
    "key3": "value3",
    "key4": 10,
    "key5": "ture"
  }
}


key6=value6 in ini


可通过


configurationBuilder.AddJsonFile("settings.json",optional:false,reloadOnChange:true);
configurationBuilder.AddIniFile("settings.ini");
//...


开启文件提供程序配置方式,测试代码如下


IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("settings.json");
configurationBuilder.AddIniFile("settings.ini");
IConfigurationRoot configurationRoot = configurationBuilder.Build();
Console.WriteLine($"key1:{configurationRoot["key1"]}");
Console.WriteLine($"key2:{configurationRoot["key2"]}");
Console.WriteLine($"key3:{configurationRoot["Section1:key3"]}");//也可获取
IConfigurationSection configurationSection = configurationRoot.GetSection("Section1");
Console.WriteLine($"key3:{configurationSection["key3"]}");
Console.WriteLine($"key4:{configurationSection["key4"]}");
Console.WriteLine($"key5:{configurationSection["key5"]}");
//ini
Console.WriteLine($"key6:{configurationRoot["key6"]}");


文件可选

可用optional指定文件是否可选,默认是false,测试,若不存在文件,则会抛异常。


configurationBuilder.AddJsonFile("settings.json",optional:false);

文件变更监视

reloadOnChange可指定是否监视文件变更,默认为true


configurationBuilder.AddJsonFile("settings.json",optional:false,reloadOnChange:true);


这里需要注意一下,如果多个文件中存在相同键,那么后加载的配置会覆盖先加载的配置。


本节到这里就要结束了,而且配置框架的4种方式也已经讲解完了,其实4种框架,除了应用方式不同外,其他的对配置的操作基本相同,只要认真写一遍,基本上都可以很快理解。下一篇,我们将会接着来学习配置热更新能力和用强类型承载配置的方式。最后,我们会一起实现用自定义数据源实现定制化的配置方案。


详细代码请参阅


https://github.com/IronMarmot/Samples/tree/master/CoreSamples


相关文章
|
9天前
|
设计模式 开发框架 JavaScript
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
109 3
|
1月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
9天前
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
|
9天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
9天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
9天前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
|
9天前
|
网络协议 网络安全 Apache
一个整合性、功能丰富的.NET网络通信框架
一个整合性、功能丰富的.NET网络通信框架
|
1月前
|
设计模式 前端开发 C#
使用 Prism 框架实现导航.NET 6.0 + WPF
使用 Prism 框架实现导航.NET 6.0 + WPF
87 10
|
1月前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报

热门文章

最新文章

下一篇
无影云桌面