.NET Core 7 Worker项目中获取并注入IConfiguration单例及配置映射
.NET Core 7 Worker项目配置绑定与单例注入方案
实现步骤
1. 获取已加载的IConfiguration实例
Host.CreateDefaultBuilder会自动加载appsettings.json、环境专属配置文件等默认配置源,你只需使用带HostBuilderContext参数的ConfigureServices重载,就能直接拿到配置实例。
2. 绑定配置到自定义类
通过IConfiguration的Bind方法,把配置文件中的键值对映射到你定义的Configuration类实例上。如果配置直接在根节点,直接调用Bind即可;若在子节点,可先通过GetSection("节点名称")定位后再绑定。
3. 注册为单例服务
将绑定完成的Configuration实例注册为单例,确保整个应用生命周期内复用同一实例。
完整修改后的Program.cs代码
IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { // 获取默认加载的配置实例 var config = context.Configuration; // 绑定配置到自定义Configuration类 var appConfiguration = new Configuration(); config.Bind(appConfiguration); // 注册为单例服务 services.AddSingleton(appConfiguration); services.AddHostedService<Worker>(); }) .Build(); host.Run();
在Worker中注入并使用配置
修改Worker类,通过构造函数注入自定义配置实例:
public class Worker : BackgroundService { private readonly Configuration _appConfig; public Worker(Configuration appConfig) { _appConfig = appConfig; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { Console.WriteLine($"当前服务名称:{_appConfig.ServiceName}"); Console.WriteLine($"数据库连接字符串:{_appConfig.ConnectionString}"); await Task.Delay(1000, stoppingToken); } } }
注意事项
- 确保
appsettings.json的复制到输出目录属性设置为「如果较新则复制」或「始终复制」,避免运行时无法读取配置文件。 - 配置绑定支持大小写不敏感匹配,但建议保持类属性名与配置键的命名风格一致(如类中
ConnectionString对应配置里的connectionString是兼容的)。 Host.CreateDefaultBuilder默认加载的配置源优先级为:命令行参数 > 环境变量 > 用户机密 > 环境配置文件(如appsettings.Development.json) > 基础appsettings.json,优先级高的配置会覆盖低优先级的。
内容的提问来源于stack exchange,提问作者rabner casandra
相关产品推荐
相关产品推荐

