IConfiguration.GetSection (), поскольку свойства возвращают ноль - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь получить конфигурацию внутри своего приложения.

Я передал IConfiguration в класс обслуживания, который должен получить некоторые настройки.

Класс выглядит примерно так:

private IConfiguration _configuration;
public Config(IConfiguration configuration)
{
    _configuration = configuration;
}
public POCO GetSettingsConfiguration()
{
    var section = _configuration.GetSection("settings") as POCO;

    return section;
}

В отладке я вижу, что _configuration содержит настройки, но мой «раздел» просто возвращается как ноль.

Я знаю, что мог попытаться настроитьPoco должен быть создан при запуске, а затем внедрен как зависимость, но из-за настройки, я бы предпочел сделать это в отдельных классах от внедренной IConfiguration, если это возможно.

В моем appsettings.json есть этизначения:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",

  "settings": {
    "Username": "user",
    "Password": "password",
    "Domain": "example.com",
    "URL": "http://service.example.com"
  }

}

Мой класс Poco выглядит следующим образом:

public class POCO
{
    public string URL { get; set; }
    public string Username { get; set; }
    public SecureString Password { get; set; }
    public string Domain { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 31 января 2019

IConfiguration и IConfigurationSection имеют метод расширения Bind для этой цели:

var poco = new POCO();
_configuration.GetSection("settings").Bind(poco);

или просто Get

var poco = _configuration.GetSection("settings").Get(typeof(POCO));

Или общий Получить

var poco = _configuration.GetSection("settings").Get<POCO>();
0 голосов
/ 31 января 2019

Вам нужно использовать:

var section = _configuration.GetSection("settings").Get<POCO>();

То, что возвращается из GetSection, это просто словарь строк.Вы не можете привести это к своему классу POCO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...