Как стать автором
Обновить

Комментарии 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.

Спасибо за статью, для новичков самое то. И не слушайте местных снобов, из-за их токсичности ресурс и умирает. Забыли, как сами были джунами.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий