如何无需依赖注入,像访问web.config一样读取appsettings.json的值?
.NET Core中无需依赖注入读取appsettings.json的方法
有,虽然.NET Core官方更推荐依赖注入的方式管理配置,但确实存在类似ASP.NET里ConfigurationManager的静态方式来读取appsettings.json的值,适合简单场景或迁移旧代码时使用。
具体实现方式
可以手动构建IConfiguration对象,无需依赖注入容器:
using Microsoft.Extensions.Configuration; using System.IO; public static class AppConfig { private static readonly IConfiguration _config; static AppConfig() { // 构建配置对象,加载appsettings.json _config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); } // 读取字符串类型配置 public static string GetString(string key) { return _config[key]; } // 读取强类型配置 public static T Get<T>(string key) { return _config.GetValue<T>(key); } // 读取嵌套配置(比如连接字符串) public static string GetConnectionString(string name) { return _config.GetConnectionString(name); } }
使用示例
// 读取普通配置项 var appName = AppConfig.GetString("AppName"); // 读取数字类型 var maxRetryCount = AppConfig.Get<int>("RetrySettings:MaxCount"); // 读取连接字符串 var dbConn = AppConfig.GetConnectionString("DefaultConnection");
注意事项
- 必须确保项目安装了
Microsoft.Extensions.Configuration.JsonNuGet包,否则无法加载JSON配置文件 - 非Web项目(比如控制台应用)要注意
Directory.GetCurrentDirectory()的路径,确保能定位到appsettings.json文件(可以手动指定绝对路径,或者设置文件的“复制到输出目录”属性为“始终复制”) - 这种静态方式虽然便捷,但违背了.NET Core的依赖注入设计原则,不利于单元测试和解耦,大型项目仍建议使用依赖注入方式
内容的提问来源于stack exchange,提问作者Yan Soo
相关产品推荐
相关产品推荐

