首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Configuration.Configuration对象引用是必需的

System.Configuration.Configuration对象引用是必需的
EN

Stack Overflow用户
提问于 2020-07-01 16:35:33
回答 3查看 2.7K关注 0票数 2

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

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

代码语言:javascript
复制
services.Configure<ConfigurationProps>(Configuration.GetSection("ApplicationConfiguration"));

当我这样做时,最初Configuration是未知的,并且我不能从任何已知的扩展/库导入它。查看这些建议,我可以看到NuGet包System.Configuration.ConfigurationManager是可用的。因此,我试图安装它,看看它是否对我有帮助。不幸的是,在这样做之后,我从Configuration对象中得到以下错误:

非静态字段、方法或属性“Configuration.GetSection(String)”需要对象引用。

从我一直遵循的指南和其他我能够在网上找到的文档中,我不需要在任何地方实例化配置类。

因此,如何按照这种方法将配置注入services.Configure方法?

编辑:添加文件

appsettings.json:

代码语言:javascript
复制
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ApplicationConfiguration": {
    "StartingPort": 13000,
    "NumberOfConnections": 1
  }
}

ConfigurationProps:

代码语言:javascript
复制
namespace ExternalGateway.Models
{
    public class ConfigurationProps
    {
        public int StartingPort { get; set; }
        public int NumberOfConnections { get; set; }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-01 17:41:43

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

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

代码语言:javascript
复制
using Microsoft.Extensions.Configuration;

    public IConfiguration Configuration { get; }

在startup.cs文件中。没有这一点,Configuration.GetSection是未知的。

修改类以:

代码语言:javascript
复制
namespace ExternalGateway.Models
    {
        public class ConfigurationProps
        {
            public const string ConfigurationProps = "ApplicationConfiguration";

            public int StartingPort { get; set; }
            public int NumberOfConnections { get; set; }
        }
    }

然后,在startup.cs中获取配置的行如下所示:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ConfigurationProps>(Configuration.GetSection(ConfigurationProps.ApplicationConfiguration));
}

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

代码语言:javascript
复制
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核心中的选项模式来完成您想要完成的任务。

票数 2
EN

Stack Overflow用户

发布于 2020-07-01 17:42:56

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

代码语言:javascript
复制
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"]);
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 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吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62681405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档