错误 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<BandSettings>(o => bandSettingsSection.Bind(o));
@ChiefTwoPencils 感谢您的评论。它与 Bind() 一起工作。但我不想和它一起使用 Bind()。
好的,但是您仍然需要处理 Configure
寻找操作 (o => 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 => 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”
如何解决错误 CS0433:类型“type”同时存在于“Microsoft.UI.Xaml,...”和“Microsoft.UI...”中
错误 CS0234:命名空间“Microsoft”中不存在类型或命名空间名称“AspNetCore”(您是不是缺少程序集引用?)
Php 错误:无法打开流:CentOS 7.1.1503(核心)中的权限被拒绝
从 C# 错误执行 DTS 包无法转换类型为“Microsoft.SqlServer.Dts.Runtime.Wrapper.ApplicationClass”的 COM 对象