TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
.NET Разработчик

28 Sep 2020, 10:07

Открыть в Telegram Поделиться Пожаловаться

День шестьсот седьмой. #ЗаметкиНаПолях
Паттерн Options. Начало
Паттерн Options помогает связывать конфигурацию приложения со строго типизированными классами. Преимущество этого подхода перед получением каждого свойства конфигурации по отдельности (помимо сокращения объёма кода) в том, что есть возможность группировать связанные свойства, а также производить валидацию свойств.
"Position": {
"Title": "Editor",
"Name": "Joe Smith"
}
public class PositionOptions {
public const string Position = "Position";
public string Title { get; set; }
public string Name { get; set; }
}
Заметьте, что используется статическая переменная Position с путём к секции конфигурации (в данном случае "Position"), чтобы избежать опечаток (см. ниже). Получить значение в коде можно через внедрение зависимости IConfiguration:
private readonly IConfiguration _configuration;
Далее либо через вызов метода ConfigurationBinder.Bind:
var positionOptions = new PositionOptions(); _configuration.GetSection(PositionOptions.Position)
.Bind(positionOptions);
либо через вызов метода ConfigurationBinder.Get:
positionOptions =
_configuration
.GetSection(PositionOptions.Position)
.Get();
Кроме того, можно добавить регистрацию параметров в сервисы:
public void ConfigureServices(IServiceCollection services) {
services.Configure(
Configuration.GetSection(
PositionOptions.Position));
// либо
services.AddOptions()
.Bind(Configuration.GetSection(
PositionOptions.Position));
…
}
И использовать через внедрение зависимости:
private readonly PositionOptions _options;
public TestModel(IOptions options) {
_options = options.Value;
}

Обновление значений
Что если нам нужно обновлять значения параметров во время работы приложения? IOptions устанавливается как Singleton в контейнере DI. Значения параметров устанавливаются при первом обращении к ним, и не могут быть изменены без рестарта. Именованные параметры (о них далее) не поддерживаются.

В этом случае вместо IOptions можно использовать один из двух вариантов:
1. IOptionsSnapshot
Поддерживает перезагрузку параметров и именованные параметры. Регистрируется как Scoped сервис. Поэтому обновлённые значения параметров будут доступны при следующем запросе к приложению. Однако из-за регистрации как Scoped, IOptionsSnapshot не может быть внедрён в Singleton сервисы.

2. IOptionsMonitor
Поддерживает перезагрузку параметров и именованные параметры. Регистрируется как Singleton сервис. Значения параметров доступны через options.CurrentValue (в отличие от Value в предыдущих случаях). Кроме того, поддерживается метод OnChange, в котором регистрируется делегат, обновляющий значения в коде при изменении конфигурации, а также, например, делающий запись в лог.

Продолжение следует…

Источник:
https://app.pluralsight.com/library/courses/dotnet-core-aspnet-core-configuration-options/

1.7k 15 34 2
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot