#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 ясно показывает, что это одноэлементный