如何从同一解决方案其他项目的静态类中获取ConnectionString?
问题根因
ConfigurationManager.ConnectionStrings 是 .NET Framework 时代的遗留API,默认仅读取 App.config/Web.config 中的 <connectionStrings> 节点,无法直接读取 appsettings.json 中的配置,这是获取失败的核心原因。
可行解决方案
1. 安装必要依赖
在静态类所在项目、解决方案的启动项目中安装对应NuGet包(ASP.NET Core项目默认已内置,无需重复安装):
Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json
2. 配置文件设置
- 右键启动项目中的
appsettings.json,选择「属性」,将「复制到输出目录」修改为「如果较新则复制」,确保运行时可以读取到配置文件。 - 确保
appsettings.json中的连接字符串格式符合规范,示例如下:
{ "ConnectionStrings": { "DefaultConnection": "你的实际数据库连接字符串" } }
3. 修改静态类实现
不要在静态字段初始化阶段读取配置,改为显式初始化逻辑,避免配置未加载完成导致空值:
public static class SystemConstants { // 改为带私有set的属性,仅初始化阶段可赋值 public static string ConnectionString { get; private set; } // 新增初始化方法,程序启动时统一调用 public static void Init(IConfiguration configuration) { ConnectionString = configuration.GetConnectionString("DefaultConnection"); } }
4. 启动时初始化静态类
在程序启动入口调用初始化方法完成配置注入:
- 若为ASP.NET Core项目,在
Program.cs中添加逻辑:
var builder = WebApplication.CreateBuilder(args); // 配置加载完成后调用静态类初始化 SystemConstants.Init(builder.Configuration); // 后续原有业务逻辑保持不变
- 若为控制台/桌面类项目,在启动入口先加载配置再初始化:
// 加载appsettings.json配置 var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); // 初始化静态类 SystemConstants.Init(config);
5. 跨项目调用
其他项目引用静态类所在的类库后,直接访问SystemConstants.ConnectionString即可获取连接字符串。
内容的提问来源于stack exchange,提问作者Can Zengin
相关产品推荐
相关产品推荐

