Важную роль в приложении играет конфигурация. Под конфигурацией обычно понимаются какие-либо настройки приложения, применяемые, например, при запуске приложения. Это могут быть такие настройки, как строки подключения к базам данных, настройки оформления окон приложения, включение каких-либо опций и т.д. В 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
.