错误 CS1503 - 无法从 Microsoft.Extensions.Configuration.IConfigurationSection 转换为 System.Action<>

in_*_*are 11 .net c# c#-4.0 .net-core asp.net-core

我收到一个错误:

错误 CS1503 参数 2:无法从“Microsoft.Extensions.Configuration.IConfigurationSection”转换为“System.Action<>

当我使用Configure with Bind() 时,它正在工作。

var bandConfig = new BandSettings();
Configuration.GetSection("BandSettings").Bind(bandConfig );
Run Code Online (Sandbox Code Playgroud)

但是使用下面的代码,我收到了上述错误。

我尝试了博客和其他论坛中建议的许多解决方案,例如 -从 .net core 中的 appsettings.json 获取价值

但仍然是同样的错误。我错过了什么吗??

我有以下内容: appsettings.json

"BandSettings":{ 
"UserID": "aTestUserID", 
"Password" : "aTestPassword" 
}
Run Code Online (Sandbox Code Playgroud)

频段设置.cs

public class BandWidthSettings
{
    public string UserID { get; set; }
    public string ApiToken { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

测试助手

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

public static IConfiguration GetTestConfiguration()
         => new ConfigurationBuilder()
                       .AddJsonFile("appsettings.json")
                       .Build();

public IConfiguration Configuration { get; }

public TestHelper(IConfiguration configuration)
{
    Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{

    var config = new BandSettings();
    var bandSettingsSection = Configuration.GetSection("BandSettings");
    services.Configure<BandSettings>(bandSettingsSection);  //Error is getting on this line - bandSettingsSection
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*bot 42

添加 NuGet 包Microsoft.Extensions.Options.ConfigurationExtensions以获取扩展方法,其中

services.Configure<BandSettings>(Configuration.GetSection("BandSettings"));
Run Code Online (Sandbox Code Playgroud)

将工作。

参考:https : //github.com/dotnet/AspNetCore.Docs/issues/18833

  • `Microsoft.Extensions.Options.ConfigurationExtensions` nuget 包很重要!! (8认同)
  • 当无法知道方法在哪里提供时,扩展方法是最糟糕的想法。文档几乎没有帮助。 (6认同)

Gab*_*ter 5

为设置创建 POCO

public class MySetting
{
  public string Setting{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在启动时它完美地工作,因为它应该是:

services.Configure<MySetting>(Configuration.GetSection("MySetting"));
Run Code Online (Sandbox Code Playgroud)

但是,在我的依赖注入中添加问题评论中提到的绑定。

private static void ConfigureServices(IServiceCollection services)
{
  var mySection = configuration.GetSection("MySetting");
  services.Configure<MySetting>(c => mySection .Bind(c));
}
Run Code Online (Sandbox Code Playgroud)


in_*_*are 0

 public IConfiguration Configuration { get; }
        public TestHelper(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            //Configure section binding  
            services.Configure<BandSettings>(Configuration.GetSection(BandSettings.SECTION));
        }
Run Code Online (Sandbox Code Playgroud)

  • 需要从 NuGet 添加 Microsoft.Extensions.Options.ConfigurationExtensions。您可以更轻松地在代码中编写 OptionsConfigurationServiceCollectionExtensions 并等待 VS 建议您。 (2认同)