.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


相关文章
|
17天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
75 3
|
27天前
|
存储 开发框架 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`,优化了内存使用和序列化速度。
|
22天前
|
设计模式 前端开发 C#
使用 Prism 框架实现导航.NET 6.0 + WPF
使用 Prism 框架实现导航.NET 6.0 + WPF
63 10
|
17天前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
|
17天前
|
Linux C# Android开发
.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms
.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms
|
2月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
2月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
77 3
|
17天前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
|
17天前
|
开发框架 缓存 前端开发
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
|
18天前
|
SQL 开发框架 关系型数据库
值得推荐的.NET ORM框架
值得推荐的.NET ORM框架