Комментарии 7
Можно было бы убрать ASP.NET, ведь он нужен только ради UI+http-запроса, и показать более абстрактно, как работает AddScoped
.
Как сделать сложные щщи и порассуждать о поведении, не вдаваясь в реализацию.
Статейка уровня "начинаю кодить на C#", примеры такие же. Причём это плохая, вредная статья, потому что она рассказывает поведение, но не объясняет его. Что это за магический scoped? Почему, вдруг, в рамках запроса? А если это не http, а https? А если это WebSocket? А если это вообще не http-сервер — там нельзя scoped использовать, да?
Вот почитают такие статьи, не вдаваясь в суть, а просто постаравшись запомнить и потом начинают на собеседованиях нести про scoped — это один инстанс на все запросы в рамках сессии пользователя (да, такое слышал).
AddScoped
Scoped — сервис создаются единожды для каждого запроса.
Это слишком частный случай. По сути сервис создается и живет в рамках какого-то scope. Запрос в aps.net является таким скоупом. Но ничего не запрещает создать свой скоуп, где сервис можно вызывать несколько раз и его жизненный цикл будет ограничен именно этой область.
Есл бы еще увидеть как именно создавать свой скоуп не в рамках http, то статья была бы определенно интереснее.
using (var scope = _ServiceScopeFactory.CreateScope())
{
var referenceContext = scope.ServiceProvider.GetService<MyContext>();
//(.....)
}
Это есть в документации, там же и пример, когда это бывает нужно — в рамках BackgroundService.
Спасибо за статью, для новичков самое то. И не слушайте местных снобов, из-за их токсичности ресурс и умирает. Забыли, как сами были джунами.
Разница между AddTransient, AddScoped и AddSingleton в ASP.NET Core