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

如何在.NET托管Worker Service的Program类中注入IConfiguration?

解决Worker Service中获取IConfiguration的问题

这个CS0120错误的原因很清晰:你在静态的CreateHostBuilder方法里尝试访问Program类的非静态Configuration字段,静态方法无法直接访问类的实例成员,所以才会报错。而且其实你完全不需要在Program类里通过构造函数注入IConfiguration——因为Host.CreateDefaultBuilder已经帮你自动加载了所有配置文件(包括appsettings.json),直接用现成的配置即可。

最简单的修复方案

直接使用ConfigureServices委托里的hostContext参数,它的Configuration属性就是已经加载好的完整配置:

public class Program { 
    public static void Main(string[] args) { 
        CreateHostBuilder(args).Build().Run(); 
    } 
    public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) 
        .ConfigureServices((hostContext, services) => { 
            services.AddHostedService<Worker>(); 
            services.AddScoped(factory => { 
                // 直接从hostContext获取配置
                var connectionString = hostContext.Configuration.GetConnectionString("DefaultConnection");
                return new QueryFactory { 
                    Compiler = new SqlServerCompiler(), 
                    Connection = new SqlConnection(connectionString), 
                }; 
            }); 
        }); 
}

关键修改点:

  1. 删除了Program类里的私有Configuration字段和构造函数——这些完全用不上,反而引发错误
  2. 用hostContext.Configuration替代原来的Configuration,hostContext是ConfigureServices委托自带的参数,包含了当前主机的所有配置信息

另一种方案:从服务容器获取IConfiguration

如果你习惯从依赖注入容器中获取服务,也可以通过factory参数(本质是IServiceProvider)直接获取IConfiguration:

services.AddScoped(factory => { 
    var config = factory.GetRequiredService<IConfiguration>();
    var connectionString = config.GetConnectionString("DefaultConnection");
    return new QueryFactory { 
        Compiler = new SqlServerCompiler(), 
        Connection = new SqlConnection(connectionString), 
    }; 
});

这种方式和第一种效果完全一致,适合需要同时获取其他服务的场景。

最后确认配置文件

别忘了确保你的appsettings.json里存在对应的连接字符串配置:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=你的服务器地址;Database=你的数据库名;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}

内容的提问来源于stack exchange,提问作者ariefs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:12:32