Worker Service启动时如何访问ConfigurationManager获取连接字符串?
解决方案
方案一:使用Host内置的IConfiguration(推荐)
Host.CreateDefaultBuilder(args)已经默认加载了多种配置源(如appsettings.json、环境变量、命令行参数等),你可以通过两种方式获取连接字符串:
方式1:在ConfigureServices外部提前获取配置
var hostBuilder = Host.CreateDefaultBuilder(args); var configuration = hostBuilder.Configuration; IHost host = hostBuilder .ConfigureServices(services => { services.AddHostedService<WorkerService>(); services.AddHangfire(config => config .UseSqlServerStorage(configuration.GetConnectionString("YourConnectionStringName"))); services.AddHangfireServer(); }) .UseWindowsService() .Build();
方式2:在ConfigureServices内部通过上下文获取
IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { services.AddHostedService<WorkerService>(); services.AddHangfire(config => config .UseSqlServerStorage(context.Configuration.GetConnectionString("YourConnectionStringName"))); services.AddHangfireServer(); }) .UseWindowsService() .Build();
注意:需要在appsettings.json中配置连接字符串节点:
{ "ConnectionStrings": { "YourConnectionStringName": "Server=.;Database=HangfireDb;Trusted_Connection=True;" } }
方案二:使用ConfigurationManager(不推荐,仅兼容旧场景)
如果必须使用ConfigurationManager,按以下步骤操作:
- 安装NuGet包:
System.Configuration.ConfigurationManager - 添加
app.config文件并配置连接字符串:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="YourConnectionStringName" connectionString="Server=.;Database=HangfireDb;Trusted_Connection=True;" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
- 将
app.config的复制到输出目录设置为「如果较新则复制」或「始终复制」 - 直接调用方法获取连接字符串:
IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddHostedService<WorkerService>(); services.AddHangfire(config => config .UseSqlServerStorage(System.Configuration.ConfigurationManager.GetConnectionString("YourConnectionStringName"))); services.AddHangfireServer(); }) .UseWindowsService() .Build();
推荐说明
优先选择方案一,它符合.NET Core/.NET 5+的现代配置体系,支持多环境配置、多种配置源,扩展性更强。
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

