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

Posted

技术标签:

【中文标题】错误 CS1503 - 无法从 Microsoft.Extensions.Configuration.IConfigurationSection 转换为 System.Action<>【英文标题】:Error CS1503 - Cannot convert from Microsoft.Extensions.Configuration.IConfigurationSection to 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。我得到了它的工作。 【参考方案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));
        

【讨论】:

以上是关于错误 CS1503 - 无法从 Microsoft.Extensions.Configuration.IConfigurationSection 转换为 System.Action<>的主要内容,如果未能解决你的问题,请参考以下文章

SharpDx:无法从“System.IntPtr”转换为“SharpDX.MediaFoundation.IByteStream”

如何使用 JpegBitmapEncoder 保存图像

如何解决错误 CS0433:类型“type”同时存在于“Microsoft.UI.Xaml,...”和“Microsoft.UI...”中

错误 CS0234:命名空间“Microsoft”中不存在类型或命名空间名称“AspNetCore”(您是不是缺少程序集引用?)

Php 错误:无法打开流:CentOS 7.1.1503(核心)中的权限被拒绝

从 C# 错误执行 DTS 包无法转换类型为“Microsoft.SqlServer.Dts.Runtime.Wrapper.ApplicationClass”的 COM 对象