.NET 6 Worker Service获取appsettings.json连接字符串报错:Configuration不存在
解决方案
报错原因是当前ConfigureServices的重载仅接收IServiceCollection参数,没有直接暴露Configuration对象,导致无法直接引用。以下是两种解决方式:
方法一:使用带HostBuilderContext的重载
修改ConfigureServices的委托签名,添加HostBuilderContext参数,通过该上下文对象获取配置:
using Microsoft.Extensions.Configuration; using WorkerService; IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { services.Configure<WorkerService.DAL._DBConnStr>(context.Configuration.GetSection("ConnectionStrings")); services.AddHttpClient(); services.AddHostedService<Worker>(); }) .Build(); await host.RunAsync();
方法二:提前构建配置对象
先手动构建IConfiguration实例,再在ConfigureServices中使用:
using Microsoft.Extensions.Configuration; using WorkerService; var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddCommandLine(args) .Build(); IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.Configure<WorkerService.DAL._DBConnStr>(configuration.GetSection("ConnectionStrings")); services.AddHttpClient(); services.AddHostedService<Worker>(); }) .Build(); await host.RunAsync();
额外注意事项
确保_DBConnStr类的属性名称与appsettings.json中ConnectionStrings下的键名一致(大小写不敏感,但建议保持匹配),示例类结构:
namespace WorkerService.DAL { public class _DBConnStr { public string Sqlserver1ConnectionString { get; set; } public string Oracle1ConnectionString { get; set; } // 对应其他连接字符串的属性 } }
内容的提问来源于stack exchange,提问作者A.K
相关产品推荐
相关产品推荐

