.Net Core 2中如何在常量类中读取配置值?
在.NET Core 2控制台应用中通过全局类访问appsettings.json配置
我懂你想要的效果——不想每次都在Program.cs里读配置,而是能在项目的任何类里通过一个全局的“常量类”轻松访问appsettings.json里的配置项。针对.NET Core 2控制台应用,我给你整理了一套落地的方案:
步骤1:确保appsettings.json能被程序读取到
控制台应用默认不会自动把appsettings.json复制到输出目录,所以得先设置文件属性:
- 右键项目里的
appsettings.json文件 - 选择“属性”
- 在“复制到输出目录”下拉框中,选择**“如果较新则复制”或“始终复制”**
步骤2:添加必要的NuGet包
要加载JSON配置文件,需要安装Microsoft.Extensions.Configuration.Json包:
- 使用Package Manager Console:
Install-Package Microsoft.Extensions.Configuration.Json - 或者使用.NET CLI:
dotnet add package Microsoft.Extensions.Configuration.Json
步骤3:创建全局配置静态类
这个类就是你要的“全局常量文件”,我们可以把它设计成静态类,既可以直接持有配置实例,也可以把常用配置项封装成静态属性(更像常量的用法):
using Microsoft.Extensions.Configuration; namespace YourConsoleAppNamespace { public static class AppSettings { // 持有完整的配置实例,方便灵活读取任意配置项 public static IConfigurationRoot Configuration { get; set; } // 封装常用配置项,直接通过属性访问,无需每次写配置路径 public static string ApiBaseUrl { get => Configuration.GetValue<string>("ApiSettings:BaseUrl", "https://default-api.com"); } public static int MaxRetryCount { get => Configuration.GetValue<int>("RetrySettings:MaxCount", 3); } } }
说明: 用GetValue<T>方法可以指定默认值,避免配置项缺失时抛出异常,更健壮。
步骤4:在Program.cs中初始化全局配置
在程序启动时加载配置,并把配置实例赋值给全局类的属性:
using Microsoft.Extensions.Configuration; using System.IO; using System; namespace YourConsoleAppNamespace { class Program { static void Main(string[] args) { // 构建配置对象 var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) // 设置配置文件所在目录 .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); // 加载JSON配置 // 初始化全局配置类 AppSettings.Configuration = configBuilder.Build(); // 测试访问配置 Console.WriteLine($"当前API地址:{AppSettings.ApiBaseUrl}"); Console.WriteLine($"最大重试次数:{AppSettings.MaxRetryCount}"); // 在其他类中使用全局配置 var businessService = new BusinessService(); businessService.Execute(); } } }
步骤5:在任意类中使用全局配置
现在你可以在项目的任何类里直接访问AppSettings的属性,无需再重复加载配置:
public class BusinessService { public void Execute() { // 直接调用全局配置 var retryCount = AppSettings.MaxRetryCount; Console.WriteLine($"业务逻辑将使用 {retryCount} 次重试机制"); } }
额外小提示
如果你的配置项比较复杂,也可以用强类型绑定(比如创建一个ApiSettings类,然后用ConfigurationBinder.Bind方法映射),不过静态类的方式对于简单场景来说更直接,符合你“全局常量文件”的需求。
内容的提问来源于stack exchange,提问作者A Developer
相关产品推荐
相关产品推荐

