【问题标题】:'IServiceCollection' does not contain a definition for 'Configuration' even though IntelliSense suggests otherwise“IServiceCollection”不包含“配置”的定义,即使 IntelliSense 另有建议
【发布时间】:2021-12-26 11:30:01
【问题描述】:

我在这里遇到了一个奇怪的问题。我创建了一个 Worker 项目,以便在 this documentation 之后在 .NET 6 中创建一个 Windows 服务。我想从appsettings.json 读取设置,所以我添加了以下代码:

IHost host = Host.CreateDefaultBuilder(args)
    .UseWindowsService(options =>
    {
        options.ServiceName = "My Service";
    })
    .ConfigureServices(services =>
    {
        var settings = new ScriptOptions(); // ScriptOptions is just a POCO class
        services.Configuration.Bind(settings);

        services.AddHostedService<WindowsBackgroundService>();
    })
    .Build();

如您所见,IntelliSense 似乎识别出services 中有Configuration 属性(IServiceCollection 的实例)。

但是,代码无法编译并出现此错误:

“IServiceCollection”不包含“Configuration”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的可访问扩展方法“Configuration”(您是否缺少 using 指令或程序集引用?)

我缺少什么包裹?我的项目目前有:

    <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />

【问题讨论】:

    标签: c# .net configuration windows-services .net-6.0


    【解决方案1】:

    看起来 IntelliSense 不知何故被另一个重载弄糊涂了。确实IServiceCollection 没有Configuration 属性,但HostBuilderContext 有。

    ConfigureServices 有另一个重载暴露了这两个参数。这解决了问题:

        // Add ctx parameter
        .ConfigureServices((ctx, services) =>
        {
            var settings = new ScriptOptions();
            ctx.Configuration.Bind(settings);
    
            services.AddHostedService<WindowsBackgroundService>();
        })
    

    似乎是一个 IntelliSense 错误,我报告了它here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 2022-01-03
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 2019-04-14
      • 2016-09-25
      • 2020-08-20
      相关资源
      最近更新 更多