Знакомство с интефейсом IOptions¶
Пусть мы хотим связать раздел настроек AppDisplaySettingsиз этого раздела с POCO классом. Тогда он будет иметь такой вид:
public class AppDisplaySettings
{
public string Title { get; set; }
public bool ShowCopyright { get; set; }
}
Чтобы быть успешно связанным, класс параметров не должен быть абстрактным, а также должен иметь открытый (public) конструктор без параметров. Связыватель установит все открытые свойства, совпадающие со значениями конфигурации. Свойства могут быть не только примитивных типов.
ASP.NET Core предоставляет интерфейс
IOptions<T> с одним свойством Value, которое содержит объект класса со значениями параметров. Классы параметров настраиваются в секции ConfigureServices класса Startup:public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MapSettings>(
Configuration.GetSection("MapSettings"));
services.Configure<AppDisplaySettings>(
Configuration.GetSection("AppDisplaySettings"));
}
Каждый вызов
Configure<T> выполняет следующее:
- Создает экземпляр
ConfigureOptions<T>, который указывает, чтоIOptions<T>должен быть настроен на основе конфигурации. ЕслиConfigure<T>вызывается несколько раз, будет создано несколько объектовConfigureOptions<T>; - Каждый экземпляр
ConfigureOptions<T>привязывает секциюIConfigurationк экземпляру POCO классаT. Все открытые свойства этого класса задаются на основе ключей из предоставленнойConfigurationSection; - Интерфейс
IOptions<T>регистрируется в контейнере зависимостей как синглтон, с привязанным объектом POCO в свойствеValue.
Если Configure<T> не будет вызван, при внедрении IOptions<T> объект класса параметров будет иметь значения свойств по умолчанию.
Если требуется, чтобы конфигурация поддерживала обновление значений параметров “на горячую”, вместо IOptions<T> нужно использовать IOptionsSnapshot<T>.
Последнее обновление :
5 ноября 2023 г.
Дата создания : 30 сентября 2022 г.
Дата создания : 30 сентября 2022 г.