Лучший способ настройки общего конфигурационного файла, который содержит несколько наборов свойств для нескольких консольных приложений .NET Core - PullRequest
0 голосов
/ 26 июня 2019

Я использую .NET Core для создания нескольких консольных приложений. Каждое приложение должно иметь возможность использовать параметр командной строки, чтобы указать, с каким географическим регионом работать. Каждый набор настроек географического региона будет включать в себя сервер БД, имя БД, URL и другие параметры разного набора.

Я разработал формат файла конфигурации JSON, который выглядит следующим образом:

[
    {
        "region_code": "east",
        "dbserver": "dbsvr1",
        "dbname": "dbeast",
        "url": "https://....",
        "hasChapter": "true"
    },
    {
        "region_code": "west",
        "dbserver": "dbsvr2",
        "dbname": "dbwest",
        "url": "https://....",
        "hasChapter": "false"
    },
    .
    .
    .
    {
        "region_code": "southwest",
        "dbserver": "dbsvr2",
        "dbname": "dbsw",
        "url": "https://....",
        "hasChapter": "true"
    }
]

И я реализую некоторый код, который использует Newtonsoft.Json для анализа файла и считывания настроек для данного кода региона.

Я знаю, что .NET Core имеет встроенные средства для обработки конфигураций. Вместо того чтобы писать собственный код для его обработки, я хочу знать, есть ли рекомендуемые способы использования встроенных функций .NET Core для удовлетворения моих потребностей.

1 Ответ

0 голосов
/ 26 июня 2019

Вы можете использовать провайдеров конфигурации для считывания данных конфигурации в пары ключ-значение из различных источников конфигурации.

Во-первых, вы можете сделать класс

   public class MiscSettings
    {
        public string region_code { get; set; }
        public string dbserver { get; set; }
        public string dbname { get; set; }
        public string url { get; set; }
        public string hasChapter { get; set; }
    }

А затем вы создаете файл appsettings.json или как хотите. Затем вы можете поместить себя, Джейсон, в созданный файл, как показано ниже.

 {
    "miscSettings": [
        {
          "region_code": "east",
          "dbserver": "dbsvr1",
          "dbname": "dbeast",
          "url": "https://....",
          "hasChapter": "true"
        },...
        {
          "region_code": "southwest",
          "dbserver": "dbsvr2",
          "dbname": "dbsw",
          "url": "https://....",
          "hasChapter": "true"
        }
      ]
 }

Теперь в вашем классе программы вы можете прочитать настройки, как показано ниже.

class Program
    {
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json");

            IConfiguration config = new ConfigurationBuilder()
          .AddJsonFile("appsettings.json", true, true)
          .Build();

            List<MiscSettings> miscSettings = config.GetSection("miscSettings")
                    .GetChildren()
                    .ToList()
                     .Select(x => (new MiscSettings
                     {
                         region_code = x.GetValue<string>("region_code"),
                         dbserver = x.GetValue<string>("dbserver"),
                         dbname = x.GetValue<string>("dbname"),
                         url = x.GetValue<string>("url"),
                         hasChapter = x.GetValue<string>("hasChapter")
                     })).ToList();

            MiscSettings settingsForEast = miscSettings.Where(x => x.region_code.Equals("east")).FirstOrDefault();
        }
    }

Я ответил на основании моего понимания вашего требования. Вам нужно добавить следующее из nuget в ваши решения.

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