Жизненный цикл опций в ASP.NET Внедрение зависимостей ядра

#c# #asp.net-core #.net-core #dependency-injection

#c# #asp.net-ядро #.net-ядро #внедрение зависимостей

Вопрос:

Какой жизненный цикл имеет объект конфигурации, когда он зарегистрирован следующим образом? Это одноэлементный, переходный или ограниченный?

   {
      services.Configure<SomeConfiguration>(configuration.GetSection(nameof(SomeConfiguration)));
  }
  

Вот как я получаю конфигурацию в свой класс обслуживания

 public class SomeService: ISomeService
{
    public SomeService(IOptionsMonitor<SomeConfiguration> configuration)
    {
         _configuration = configuration.CurrentValue;
    }
}
  

Очень сложно узнать из отладки, является ли он синглтоном или нет. Поскольку IOptionsMonitor способен обнаруживать изменения во время выполнения, запуская наблюдателя в appsettings.json изменен

Ответ №1:

IOptions

IOptionsSnapshot:

  • Полезно в сценариях, где параметры должны пересчитываться при каждом запросе.
  • Зарегистрирован как ограниченный и, следовательно, не может быть введен в одноэлементную службу.

IOptionsMonitor:

  • Используется для извлечения параметров и управления уведомлениями о параметрах для экземпляров TOptions.
  • Зарегистрирован как одноэлементный и может быть введен в любое время службы.

Ссылка

Ответ №2:

Согласно официальным документам:

В IOptionsMonitor<TOptions>

Зарегистрирован как одноэлементный и может быть введен в любое время службы.

Вы также можете ознакомиться с кодом github OptionsServiceCollectionExtensions.cs , чтобы узнать, как регистрируются зависимости — ССЫЛКА.

Комментарии:

1. Спасибо за ваш ответ, как вы сказали, из вашей ссылки, строка 72 ясно показывает, что это одноэлементный