Содержание
Под конфигурацией приложения обычно понимаются какие-либо настройки, применяемые, например, при запуске приложения. Это могут быть такие настройки, как строки подключения к базам данных, настройки оформления приложения, включение дополнительных опций и т. д.
Источники и поставщики конфигурации
Для конфигурации приложения ASP.NET Core мы можем использовать следующие источники конфигурации:
- JSON-файлы, XML-файлы и другие файлы
- переменные среды
- хранилище ключей Azure;
- аргументы командной строки;
- пользовательские поставщики конфигурации;
- объекты .NET в памяти;
В терминах C# каждый источник конфигурации представлен в ASP.NET Core классом, реализующим интерфейс IConfigurationSource.
Под каждый вид источника конфигурации в ASP.NET Core имеются или разрабатываются самостоятельно поставщики конфигурации (наследники класса ConfigurationProvider), в которых все настройки приложения хранятся в парах вида «ключ-значение». При этом работа с настройками приложения ASP.NET Core построена таким образом, что нам, в большинстве случаев, не требуется знать ни источник конфигурации, ни то, какой провайдер конфигурации был задействован для получения той или иной настройки приложения.
Для работы с источниками и провайдерами конфигурации в ASP.NET Core используется свойство Configuration объекта WebApplicationBuilder. Это свойство представлено объектом типа ConfigurationManager.
Класс ConfigurationManager реализует сразу ряд интерфейсов и его описание выглядит следующим образом:
public sealed class ConfigurationManager : IDisposable, IConfigurationManager, IConfigurationRoot
В свою очередь, если посмотреть на интерфейсы IConfigurationManager и IConfigurationRoot, то можно увидеть, что эти интерфейсы наследуются от других интерфейсов, таких как IConfiguration и IConfigurationBuilder. Рассмотрим кратко то, какие свойства и методы предоставляют эти интерфейсы.
Интерфейс IConfiguration
Этот интерфейс предоставляет доступ к набору свойств конфигурации приложения в виде пар «Ключ – Значение». Именно с объектами, реализующими этот интерфейс мы и будем работать в дальнейшем чаще всего для того, чтобы получить или добавить настройку в приложении.
Для нас работа с конфигурацией приложения выглядит следующим образом:
То есть, какой бы источник конфигурации не был задействован — мы в любом случае обратимся к интерфейсу IConfiguration для получения значений настройки в виде пары «ключ-значение». У IConfiguration определены методы и свойства, представленные в таблице
| Название | Тип/тип возвращаемого методом значения | Описание |
| Свойства IConfiguration | ||
Item[String] |
String |
Предоставляет доступ к настройке. |
| Методы IConfiguration | ||
GetChildren() |
IEnumerable<IConfigurationSection> |
Возвращает непосредственных потомков узла конфигурации |
GetSection (string key) |
IConfigurationSection |
Возвращает подраздел конфигурации с указанным ключом |
GetReloadToken() |
IChangeToken |
Метод можно использовать для получения маркера изменения, уведомляющего о перезагрузке конфигурации |
Интерфейс IConfigurationBuilder
Этот интерфейс представляет тип, используемый для построения конфигурации приложения, и содержит свойства и методы, представленные в таблице
| Название | Тип/тип возвращаемого методом значения | Описание |
| Свойства IConfigurationBuilder | ||
Properties |
IDictionary<String,Object> |
Возвращает коллекцию ключей и значений, которую можно использовать для обмена данными между IConfigurationBuilder и зарегистрированными поставщиками конфигурации |
Sources |
IList<IConfigurationSource> |
Возвращает список источников конфигурации |
| Методы IConfigurationBuilder | ||
Add (IConfigurationSource source) |
IConfigurationBuilder |
Добавляет новый источник конфигурации. |
Build () |
IConfigurationRoot |
Создает IConfiguration с ключами и значениями на основе набора источников, зарегистрированных в Sources |
Для нас ценность этого интерфейса заключается, в первую очередь, в методах его расширения. Ниже, в таблице представлены лишь некоторые из методов расширения IConfigurationBuilder, которые могут использоваться для работы с конфигурацией приложения ASP.NET Core
| Название | Описание |
AddCommandLine(IConfigurationBuilder, String[]) |
Добавляет CommandLineConfigurationProvider, считывающий значения конфигурации из командной строки |
AddEnvironmentVariables(IConfigurationBuilder, String) |
Добавляет IConfigurationProvider, считывающий значения конфигурации из переменных среды с указанным префиксом. |
AddIniFile(IConfigurationBuilder, String) |
Добавляет поставщик конфигурации INI по пути path в builder. |
AddJsonFile(IConfigurationBuilder, String) |
Добавляет поставщик конфигурации JSON по пути path в builder. |
AddXmlFile(IConfigurationBuilder, String) |
Добавляет поставщик конфигурации XML по пути path в builder |
Теперь, изучив основные интерфейсы, используемые для работы с конфигурацией приложения, перейдем к изучению различных провайдеров конфигурации и их использованию в нашем проекте.
Итого
Для конфигурации приложения ASP.NET Core Web API могут использоваться различные источники, такие как файлы, аргументы командной строки, объекты .NET в памяти и так далее. В любом случае, какой бы источник конфигурации не использовался, для нас все настройки приложения будут представлять из себя пары «ключ — значение», которые мы можем получить, используя интерфейс IConfiguration. В свою очередь, добавление новых источников конфигурации производится с использованием методов расширения IConfigurationBuilder.
