直接回答:.NET 配置的优先级是环境变量高于配置文件,容器里覆盖连接串按 ConnectionStrings__DefaultConnection 这种双下划线的写法传进去就会自动生效。

使用 appsettings.json 配置文件并通过 Microsoft.Extensions.Configuration 包来读取配置是一种常见且灵活的方法。以下是详细的步骤:

1. 创建 appsettings.json 文件

首先,在项目根目录下创建一个 appsettings.json 文件,并添加一些配置项。例如:

1
2
3
4
5
6
7
8
9
{
"MySettings": {
"Setting1": "Value1",
"Setting2": "Value2"
},
"ConnectionStrings": {
"DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"
}
}

2. 安装必要的 NuGet 包

确保你的项目中安装了以下 NuGet 包:

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Configuration.EnvironmentVariables

你可以通过 NuGet 包管理器或命令行来安装这些包:

1
2
3
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json
dotnet add package Microsoft.Extensions.Configuration.EnvironmentVariables

3. 配置 ConfigurationBuilder

在你的应用程序入口(通常是 Program.cs 文件)中,使用 ConfigurationBuilder 来构建配置对象。以下是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using Microsoft.Extensions.Configuration;
using System;

class Program
{
static void Main(string[] args)
{
// 构建配置
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();

IConfigurationRoot configuration = builder.Build();

// 读取配置
string setting1 = configuration["MySettings:Setting1"];
string setting2 = configuration["MySettings:Setting2"];
string connectionString = configuration["ConnectionStrings:DefaultConnection"];

Console.WriteLine($"Setting1: {setting1}");
Console.WriteLine($"Setting2: {setting2}");
Console.WriteLine($"Connection String: {connectionString}");
}
}

4. 运行应用程序

运行你的应用程序,它将从 appsettings.json 文件中读取配置并输出到控制台。

5. 覆盖配置(可选)

你可以在 docker-compose.yml 或 Dockerfile 中使用环境变量来覆盖 appsettings.json 中的配置。例如:

1
2
3
4
5
6
7
8
version: '3.4'

services:
myapp:
image: myapp:latest
environment:
- MySettings__Setting1=OverrideValue1
- ConnectionStrings__DefaultConnection=Server=overrideServer;Database=overrideDB;User Id=overrideUser;Password=overridePassword

这样,当容器启动时,环境变量会覆盖 appsettings.json 中的相应配置。注意,是双下划线

总结

通过上述步骤,你可以在 .NET 应用程序中使用 appsettings.json 文件和 Microsoft.Extensions.Configuration 包来读取和管理配置。这种方法不仅灵活,而且易于扩展和维护。

这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。

站内搜索

没有找到内容!