System.Configuration.Configuration 需要对象引用



我正在为一个简单的问题而扯头发。我的 .NET Core 3 应用程序中有一些设置,我认为最好将其移动到我的appsettings.json文件中。我按照本指南这样做:https://www.c-sharpcorner.com/article/reading-values-from-appsettings-json-in-asp-net-core/

在指南的下方,有一节是关于如何依赖注入部分配置的,我认为这是一个好主意。它说在ConfigureServices方法中将以下代码添加到我的Startup.cs文件中。

services.Configure<ConfigurationProps>(Configuration.GetSection("ApplicationConfiguration"));

当我这样做时,起初Configuration是未知的,我无法从任何已知的扩展/库中导入它。查看建议,我可以看到可用的 NuGet 包System.Configuration.ConfigurationManager。因此,我尝试安装它以查看它是否对我有帮助。不幸的是,这样做之后,我从配置对象收到以下错误:

非静态字段、方法或属性 'Configuration.GetSection(string(' 需要对象引用

从我一直遵循的指南以及我能够在线找到的其他文档中,我不需要在任何地方实例化 Configuration 类。

那么,如何按照这种方法将我的配置注入services.Configure方法呢?

编辑:添加的文件

appsettings.json:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ApplicationConfiguration": {
"StartingPort": 13000,
"NumberOfConnections": 1
}
}

配置道具:

namespace ExternalGateway.Models
{
public class ConfigurationProps
{
public int StartingPort { get; set; }
public int NumberOfConnections { get; set; }
}
}

我将尝试根据您的appsettings.json文件和ConfigurationProps类使我所说的内容更容易阅读:

在 startup.cs 文件中,确保您具有:

using Microsoft.Extensions.Configuration;
public IConfiguration Configuration { get; }

在您的启动.cs文件中。没有它,Configuration.GetSection 是未知的。

将类修改为:

namespace ExternalGateway.Models
{
public class ConfigurationProps
{
public const string ConfigurationProps = "ApplicationConfiguration";
public int StartingPort { get; set; }
public int NumberOfConnections { get; set; }
}
}

然后你在启动.cs获取配置的行将如下所示:

public void ConfigureServices(IServiceCollection services)
{
services.Configure<ConfigurationProps>(Configuration.GetSection(ConfigurationProps.ApplicationConfiguration));
}

然后,将依赖项注入到类中如下所示:

using Microsoft.Extensions.Options;
public class MyClass
{
private readonly int _startingPort;
private readonly int _numberOfConnections;
public MyClass(IOptions<ConfigurationProps> configurationProps)
{
_startingPort = configurationProps.Value.StartingPort;
_numberOfConnections = configurationProps.Value.NumberOfConnections;
}

除非此处有任何拼写错误,否则这应该可以完成你尝试使用 .NET Core 中的选项模式执行的操作。

您尝试执行的操作看起来很像选项模式。这里有一篇非常直接的文章:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-3.1

不需要 NuGet 包即可使用它。 你只需要更改你的Configuration.GetSection语句,并确保你的appsettings.json和你的"MySettingsModel"结构正确。

如果文章没有为您解决此问题,您可以发布您的模型和appsettings.json吗?

我认为您提到的指南使用的是.netcore 2.0。在 .netcore 3.1 中,您只需要在控制器的构造函数中包含"IConfiguration configuration",然后就可以通过 configuration["ApplicationConfiguration:StartingPort"] 访问您的 appSettings.json,如以下示例所示:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

namespace ConfigTest.Controllers
{
[ApiController]
[Route("[controller]")]
public class YourController : ControllerBase
{        
private readonly IConfiguration _configuration;
public YourController(IConfiguration configuration)
{
_configuration = configuration;           
}
[HttpGet]
public ActionResult Get()
{
return Ok(_configuration["ApplicationConfiguration:StartingPort"]);
}
}
}

最新更新