【问题标题】:Error CS1503 - Cannot convert from Microsoft.Extensions.Configuration.IConfigurationSection to System.Action<>错误 CS1503 - 无法从 Microsoft.Extensions.Configuration.IConfigurationSection 转换为 System.Action<>
【发布时间】:2020-04-21 20:31:19
【问题描述】:

我收到一个错误:

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

当我使用带有 Bind() 的配置时,它正在工作。

var bandConfig = new BandSettings();
Configuration.GetSection("BandSettings").Bind(bandConfig );

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

我尝试了博客和其他论坛中建议的许多解决方案, 例如 - Getting value from appsettings.json in .net core

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

我有以下事情: appsettings.json

"BandSettings":{ 
"UserID": "aTestUserID", 
"Password" : "aTestPassword" 
}

BandSettings.cs

public class BandWidthSettings
{
    public string UserID { get; set; }
    public string ApiToken { get; set; }
}

TestHelper.cs

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
}

【问题讨论】:

  • 不是吗:services.Configure&lt;BandSettings&gt;(o =&gt; bandSettingsSection.Bind(o));
  • @ChiefTwoPencils 感谢您的评论。它与 Bind() 一起工作。但我不想和它一起使用 Bind()。
  • 好的,但是您仍然需要处理 Configure 寻找操作 (o =&gt; SomeVoidMethod()) 而不是配置部分。
  • 谢谢@ChiefTwoPencils。我得到了它的工作。

标签: c# .net asp.net-core c#-4.0 .net-core


【解决方案1】:

添加NuGet包Microsoft.Extensions.Options.ConfigurationExtensions获取扩展方法在哪里

services.Configure<BandSettings>(Configuration.GetSection("BandSettings"));

会起作用的。

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

【讨论】:

  • Microsoft.Extensions.Options.ConfigurationExtensions nuget 包很重要!!
  • 扩展方法是最糟糕的想法,当没有办法知道方法提供在哪里时。文档几乎没有帮助。
【解决方案2】:

为设置创建一个 POCO

public class MySetting
{
  public string Setting{ get; set; }
}

在启动时它可以正常工作:

services.Configure<MySetting>(Configuration.GetSection("MySetting"));

但是在我的依赖注入中添加了问题 cmets 中提到的绑定。

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

【讨论】:

  • c =&gt; mySection .Bind(c) 对我来说是缺失的部分。谢谢。
【解决方案3】:
 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));
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多