You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:30:15