Как отобразить конфигурацию в IConfigurationSection на простой класс - PullRequest
0 голосов
/ 28 ноября 2018

Использование MVC .net Core и создание конкретного класса конфигурации в классе запуска.Мой appsettings.json выглядит следующим образом:

{
  "myconfig": {
    "other2": "tester,
    "other": "tester",
    "root": {
      "inner": {
        "someprop": "TEST VALUE"
      }
    }
  }
}

Я представил это конкретным классом следующим образом:

public class TestConfig
{
    public string other2 { get; set; }
    public string other { get; set; }
    public Inner1 root { get; set; }
}

public class Inner1
{
    public Inner2 inner { get; set; }
}

public class Inner2
{
    public string someprop { get; set; }
}

И я могу легко сопоставить это, выполнив следующее:

var testConfig = config.GetSection("myconfig").Get<TestConfig>();

Однако .... что мне не нравится в вышесказанном, так это необходимость сделать TestConfig более сложным, чем нужно.В идеале я хотел бы что-то вроде этого:

public class PreciseConfig
{
    [Attribute("root:inner:someprop")]
    public string someprop { get; set; }
    public string other { get; set; }
    public string other2 { get; set; }
}

Где мне не нужно размещать вложенные объекты внутри, и я могу напрямую отобразить это свойство на более низкое свойство.Это возможно?Использование .net Core 2.1.

Спасибо за любые указатели заранее!

Ps Я знаю, что могу сам создать экземпляр PreciseConfig и установить свойства, используя config.GetValue<string>("root:inner:someprop") НО я не хочуЯ должен установить все свои пользовательские настройки таким образом, если я могу сделать их автоматически, используя свойство сериализации или подобное.

1 Ответ

0 голосов
/ 28 ноября 2018

Для конфигурации более высокого уровня вы получаете конфигурацию как обычно с верхним узлом.

Затем используйте путь myconfig:root:inner, чтобы получить другой желаемый раздел, и Bind PreciseConfig из предыдущего шага

var preciseConfig = config.GetSection("myconfig").Get<PreciseConfig>();

config.GetSection("myconfig:root:inner").Bind(preciseConfig);

Ссылка Конфигурация в ASP.NET Core: GetSection

Ссылка Конфигурация в ASP.NET Core: привязка к графу объектов

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