C# (.NET) 应用程序配置:库与方法

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 应用程序配置:Microsoft.Extensions.Configuration 库完全指南



基于 C# 和 .NET 的现代应用程序需要灵活的设置管理:数据库连接字符串、外部服务 URL、日志记录参数等。Microsoft.Extensions.Configuration 库提供了一个强大且统一的配置管理机制。它支持多种数据源(JSON、XML、环境变量、命令行参数),并允许将它们组合在同一个层次结构中。



库的主要功能

  • 多层次合并 — 来自不同源的设置合并为一个统一对象。
  • 源优先级 — 最后添加的源会覆盖之前的设置。
  • 绑定到类(Options 模式) — 从配置自动填充 POCO 对象。
  • 动态更新 — 支持无需重启应用程序即可重新读取文件。
  • 安全性 — 敏感数据可移至环境变量或 Azure Key Vault。


基本用法:从 appsettings.json 读取

在项目根目录创建 appsettings.json 文件:

{  "Logging": {    "LogLevel": {      "Default": "Information",      "Microsoft": "Warning"    }  },  "ConnectionStrings": {    "DefaultConnection": "Server=localhost;Database=mydb;User Id=sa;Password=***;"  },  "AppSettings": {    "AppName": "MyApp",    "MaxRetries": 3,    "FeatureFlags": {      "EnableNewUI": true,      "EnableAnalytics": false    }  }}


在代码中加载配置:

using Microsoft.Extensions.Configuration;

var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build();

// 读取简单值string appName = configuration["AppSettings:AppName"];int maxRetries = int.Parse(configuration["AppSettings:MaxRetries"]);

// 读取嵌套节var loggingSection = configuration.GetSection("Logging:LogLevel");string defaultLevel = loggingSection["Default"];

// 读取连接字符串string connString = configuration.GetConnectionString("DefaultConnection");

Console.WriteLine($"应用程序: {appName}, 重试次数: {maxRetries}");


源优先级与合并

您可以组合多个源。例如,先加载 JSON,然后通过环境变量覆盖特定参数:

var config = new ConfigurationBuilder()    .AddJsonFile("appsettings.json")    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) // 用于 Development/Production    .AddEnvironmentVariables() // 环境变量具有更高优先级    .AddCommandLine(args)      // 命令行参数具有最高优先级    .Build();


绑定到强类型类(Options 模式)

为配置节创建类:

public class AppSettings{    public string AppName { get; set; }    public int MaxRetries { get; set; }    public FeatureFlags FeatureFlags { get; set; }}

public class FeatureFlags{ public bool EnableNewUI { get; set; } public bool EnableAnalytics { get; set; }}


然后在 Program.cs 中使用 DI 容器 进行绑定:

// 注册服务builder.Services.Configure<AppSettings>(    builder.Configuration.GetSection("AppSettings"));

// 在类中使用(例如,在控制器中)public class HomeController : Controller{ private readonly AppSettings _settings; public HomeController(IOpti

推荐