Конфигурация в ASP.NET Core. Интерфейс IConfiguration

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

Поставщики конфигурации

Для конфигурации приложения ASP.NET Core мы можем использовать следующие источники:

  • JSON-файлы параметров, например appsettings.json
  • переменные среды
  • хранилище ключей Azure;
  • аргументы командной строки;
  • пользовательские поставщики конфигурации;
  • объекты .NET в памяти;

Под каждый вид источника конфигурации имеются (или разрабатываются самостоятельно) поставщики конфигурации в которых все настройки приложения хранятся в парах вида «ключ-значение». Данные по конфигурации можно получать из нескольких источников, например, из файлов json и параметров командной строки.

Интерфейс IConfiguration

Интерфейс IConfiguration представляет конфигурацию приложения и выглядит следующим образом:

public interface IConfiguration
{
   string? this[string key] { get; set; }
   IConfigurationSection GetSection(string key);
   IEnumerable<IConfigurationSection> GetChildren();
   IChangeToken GetReloadToken();
}

Элементы интерфейса следующие:

Элемент Тип Описание
string? this[string key] свойство-индексатор позволяет считывать или записывать настройку в виде  пары «ключ-значение»
GetSection(string key) метод возвращает отдельную секцию конфигурации, соответствующую параметру key
GetChildren() метод возвращает набор подсекций текущей секции конфигурации в виде объекта IEnumerable<IConfigurationSection>
GetReloadToken() метод возвращает объект IChangeToken, который применяется для отслеживания изменения конфигурации

Чтобы получить конфигурацию приложения в виде объекта, реализующего интерфейс IConfiguration, мы можем воспользоваться свойством объекта WebApplication.Configurationили же запросить конфигурацию приложения через механизм Dependency Injection.

Например, воспользуемся вторым способом и перечислим все настройки приложения ASP.NET Core:

app.MapGet("/",(IConfiguration configuration) => 
{
    StringBuilder sb = new StringBuilder();
    foreach (var pair in configuration.AsEnumerable())
    {
        sb.AppendLine($"{pair.Key} - {pair.Value}");
    }
    return sb.ToString();
});

в результате мы увидим следующий вывод:

Также, запросив объект конфигурации мы можем устанавливать собственные настройки для приложения. Например,

app.MapGet("/",(IConfiguration configuration) => 
 {
     configuration["StartPage"] = "/tasks";
     configuration["Language"] = "RU-ru";

     StringBuilder sb = new StringBuilder();
     foreach (var pair in configuration.AsEnumerable())
     {
         sb.AppendLine($"{pair.Key} - {pair.Value}");
     }
     return sb.ToString();
 });

Здесь мы указали два элемента конфигурации: StartPage со значением /tasks и Language со значением RU-ru. Указанные настройки будут сохранены в словаре:

Для получения настройки не обязательно передирать весь словарь — достаточно запросить необходимую настройку по её ключу:

app.MapGet("/",(IConfiguration configuration) => 
{
    configuration["StartPage"] = "/tasks";
    configuration["Language"] = "RU-ru";

    StringBuilder sb = new StringBuilder();
    
    sb.AppendLine(configuration["windir"]);
    sb.AppendLine(configuration["StartPage"]);
    sb.AppendLine(configuration["Language"]);

    return sb.ToString();
});

результат представлен на рисунке ниже

Добавление источника конфигурации

Перечень настроек приложения может насчитывать различное количество элементов. Более того, каждая настройка может иметь сложную структуру. В этом случае, удобно передавать в приложение настройки не по отдельности, а в составе какого-либо объекта. Чтобы это сделать, мы можем воспользоваться свойством Configuration объекта WebApplicationBuilder, которое представляет собой менеджер конфигураций (ConfigurationManager) и содержит ряд методов добавления новых источников конфигурации в приложение. Например,

var builder = WebApplication.CreateBuilder(args);

IEnumerable<KeyValuePair<string, string>> values = new List<KeyValuePair<string, string>>()
{
    new KeyValuePair<string, string>("StartPage", "/tasks"),
    new KeyValuePair<string, string>("Language", "RU-ru"),
};

builder.Configuration.AddInMemoryCollection(values);

здесь в качестве источника конфигурации мы использовали список List<KeyValuePair<string, string>>, который передали в метод расширения AddInMemoryCollection. Таким образом мы получим конфигурацию приложения, как показано на рисунке выше.

Стоит отметить, что ConfigurationManager реализует также интерфейс IConfigurationBuilder у которого, помимо метода AddInMemoryCollection определено достаточно много методов расширения, позволяющих добавлять в качестве источника конфигурации Ini-файлы, json-файлы и т.д.

Итого

Конфигурация в ASP.NET Core используется для первоначальной настройки приложения. В качестве источников конфигурации могут использоваться параметры командной строки, файлы различных форматов, а также классы .NET. Для получения доступа к конфигурации мы можем использовать свойство WebApplication.Configuration или использовать механизм DI для запроса сервиса конфигурации, например в конечных точках приложения. Также мы можем добавлять собственные источники конфигурации, используя свойство WebApplicationBuilder.Configuration.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии