在ASP.NET Core MVC中如何从静态类读取appsettings.json的值?
问题描述
我用Visual Studio 2022创建了全新的ASP.NET Core 8 MVC项目,在appsettings.json中配置了连接字符串:
"ConnectionStrings": { "MyDB": "...connecting...details...." }
目前可以在控制器中通过依赖注入IConfiguration读取该值:
private IConfiguration _AppSettingsConfig; public PocController(IConfiguration config) { _AppSettingsConfig = config; }
调用方式如下:
_AppSettingsConfig.GetConnectionString("MyDB")
或者:
_AppSettingsConfig["ConnectionStrings:MyDB"];
这种方式可行,但我希望用包含静态属性的类封装逻辑,直接返回appsettings.json对应值,代替上述代码:
public class ConfigProps { public static string MyDBConString { get { return "how do I get from here to the config?"; } } }
请问是否有实现方法?
实现方法
方法1:通过启动初始化静态类
ASP.NET Core启动阶段可以获取IConfiguration实例,直接给静态类赋值:
- 修改
ConfigProps类,添加初始化方法和存储字段:
public class ConfigProps { private static string _myDBConString; // 供启动时调用初始化 public static void Initialize(IConfiguration config) { _myDBConString = config.GetConnectionString("MyDB"); } public static string MyDBConString => _myDBConString; }
- 在
Program.cs中完成初始化(构建WebApplication之后):
var builder = WebApplication.CreateBuilder(args); // ... 其他服务注册代码 ... var app = builder.Build(); // 初始化静态配置类 ConfigProps.Initialize(app.Configuration); // ... 中间件配置代码 ... app.Run();
之后即可在项目任意位置直接调用ConfigProps.MyDBConString获取连接字符串。
方法2:强类型配置(更推荐的规范方案)
虽然你要求静态属性,但ASP.NET Core官方更推荐强类型配置结合依赖注入的方式,相比静态类更灵活、可测试:
- 创建强类型配置类:
public class ConnectionStrings { public string MyDB { get; set; } = string.Empty; }
- 在
Program.cs中绑定配置:
builder.Services.Configure<ConnectionStrings>(builder.Configuration.GetSection("ConnectionStrings"));
- 在控制器或服务中注入使用:
private readonly ConnectionStrings _connectionStrings; public PocController(IOptions<ConnectionStrings> options) { _connectionStrings = options.Value; } // 使用示例 var dbConnection = _connectionStrings.MyDB;
这种方式符合ASP.NET Core设计理念,支持配置重载、绑定验证等特性,更易于维护和扩展。
内容的提问来源于stack exchange,提问作者Leo Muller
相关产品推荐
相关产品推荐

