如何让.NET类库同时兼容appsettings.json与app.config配置读取?
统一读取不同配置文件的实现方案
完全可以通过统一代码实现,核心是利用.NET配置系统的扩展性,让两种应用的IConfiguration实例正确加载对应配置源,共享类库仅依赖IConfiguration接口即可,无需关心底层配置文件类型。
1. 共享类库保持原有逻辑
共享类库中的数据库助手类无需修改,继续依赖IConfiguration并使用GetConnectionString方法读取配置:
public class DbHelper { private readonly string _connectionString; public DbHelper(IConfiguration configuration) { _connectionString = configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("未找到数据库连接字符串"); } // 数据库操作方法实现 }
注:GetConnectionString是通用方法,只要IConfiguration中存在ConnectionStrings:DefaultConnection节点,无论配置来自哪种文件都能读取。
2. ASP.NET Core应用配置(appsettings.json)
ASP.NET Core默认已自动加载appsettings.json,只需在配置文件中定义连接字符串:
{ "ConnectionStrings": { "DefaultConnection": "Server=.;Database=Demo;Trusted_Connection=True;" } }
在Program.cs中注册DbHelper即可:
builder.Services.AddScoped<DbHelper>();
3. .NET Core控制台应用配置(app.config)
控制台应用需手动配置IConfiguration以加载app.config,步骤如下:
- 安装NuGet包:
Microsoft.Extensions.Configuration.ConfigurationManager,该包支持读取传统app.config配置。 - 在Program.cs中构建
IConfiguration:
var configuration = new ConfigurationBuilder() .AddConfigurationManager() // 加载app.config中的配置项 .Build();
- 配置
app.config中的连接字符串节点:
<configuration> <connectionStrings> <add name="DefaultConnection" connectionString="Server=.;Database=Demo;Trusted_Connection=True;" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
- 若使用依赖注入,需注册服务(需安装
Microsoft.Extensions.DependencyInjection):
var services = new ServiceCollection(); services.AddSingleton<IConfiguration>(configuration); services.AddScoped<DbHelper>(); using var serviceProvider = services.BuildServiceProvider(); var dbHelper = serviceProvider.GetRequiredService<DbHelper>();
注:AddConfigurationManager()会自动将app.config中的connectionStrings节点映射到IConfiguration的ConnectionStrings节点下,与appsettings.json的结构对齐。
总结
共享类库无需针对不同应用做适配,只需确保两个应用各自完成IConfiguration的正确配置,就能通过统一的代码读取不同格式配置文件中的连接字符串。
内容的提问来源于stack exchange,提问作者Helic
相关产品推荐
相关产品推荐

