我正为一个简单的问题而发狂。我在我的.NET核心3应用程序中设置了一些设置,我认为最好移动到我的appsettings.json文件。我按照这个指南来做:https://www.c-sharpcorner.com/article/reading-values-from-appsettings-json-in-asp-net-core/
在指南的后面,有一个关于如何注入配置的依赖项的章节,我认为这是一个很好的方法。它说要在Startup.cs方法中将以下代码添加到我的ConfigureServices文件中。
services.Configure<ConfigurationProps>(Configuration.GetSection("ApplicationConfiguration"));当我这样做时,最初Configuration是未知的,并且我不能从任何已知的扩展/库导入它。查看这些建议,我可以看到NuGet包System.Configuration.ConfigurationManager是可用的。因此,我试图安装它,看看它是否对我有帮助。不幸的是,在这样做之后,我从Configuration对象中得到以下错误:
非静态字段、方法或属性“Configuration.GetSection(String)”需要对象引用。
从我一直遵循的指南和其他我能够在网上找到的文档中,我不需要在任何地方实例化配置类。
因此,如何按照这种方法将配置注入services.Configure方法?
编辑:添加文件
appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ApplicationConfiguration": {
"StartingPort": 13000,
"NumberOfConnections": 1
}
}ConfigurationProps:
namespace ExternalGateway.Models
{
public class ConfigurationProps
{
public int StartingPort { get; set; }
public int NumberOfConnections { get; set; }
}
}发布于 2020-07-01 17:41:43
我将尝试根据您的appsettings.json文件和您的ConfigurationProps类使我所说的内容更容易阅读:
在您的startup.cs文件中,确保您拥有:
using Microsoft.Extensions.Configuration;
public IConfiguration Configuration { get; }在startup.cs文件中。没有这一点,Configuration.GetSection是未知的。
修改类以:
namespace ExternalGateway.Models
{
public class ConfigurationProps
{
public const string ConfigurationProps = "ApplicationConfiguration";
public int StartingPort { get; set; }
public int NumberOfConnections { get; set; }
}
}然后,在startup.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核心中的选项模式来完成您想要完成的任务。
发布于 2020-07-01 17:42:56
我认为您提到的指南是使用.netcore 2.0。使用configuration"ApplicationConfiguration:StartingPort",3.1时,只需在控制器的构造函数中包含"IConfiguration配置“,就可以通过.netcore访问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"]);
}
}
}发布于 2020-07-01 16:46:03
你想要做的事情看上去很像选项模式。这里有一篇非常直截了当的文章:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-3.1。
您不需要NuGet包来使用它。您只需更改Configuration.GetSection语句,并确保您的appsettings.json和"MySettingsModel“结构正确。
如果这篇文章没有为你解决这个问题,你能发布你的模型和appsettings.json吗?
https://stackoverflow.com/questions/62681405
复制相似问题