@SamMorgan

Что же такое Scoped жизненный цикл в ASP.NET?

Часто задаваемый вопрос на собеседованиях о жизненном цикле объектов в IoC контейнере это "Что такое Scoped?". В очередной раз наткнулся на данный вопрос при собеседовании и ответил следующим образом "Создается один объект при его запросе в рамках некой области, например http запроса, и в последующем выдается уже созданный в рамках этой области". Часто получал утверждение что неправильно, и непонятно что за область. При встречном вопросе собеседующему так же ещё не получал внятного ответа. Собственно вопрос, что это за область, в которой существует Scoped объекты? И как эти scoped объеты существуют в background сервисах?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
var scope = serviceProvider.CreateScope();
var provider = scope.ServiceProvider;

вот все, что ранее было обьявлено через AddScoped, и что теперь будет браться из provider является Scoped
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka Куратор тега ASP.NET
Токсичный шарпист
И как эти scoped объеты существуют в background сервисах?

Никак. В рамках IHostedService никакой скоуп не создаётся - надо руками его создавать.
Как подтверждение - при попытке зарезолвить Scoped - будет ошибка

"Создается один объект при его запросе в рамках некой области, например http запроса, и в последующем выдается уже созданный в рамках этой области". Часто получал утверждение что неправильно, и непонятно что за область

Странные челы какие-то. Вроде вполне корректный ответ, хоть и странно сформулированный.


Scoped
For web applications, a scoped lifetime indicates that services are created once per client request (connection). Register scoped services with AddScoped.

In apps that process requests, scoped services are disposed at the end of the request.

When using Entity Framework Core, the AddDbContext extension method registers DbContext types with a scoped lifetime by default.

Note

Do not resolve a scoped service from a singleton and be careful not to do so indirectly, for example, through a transient service. It may cause the service to have incorrect state when processing subsequent requests. It's fine to:

  • Resolve a singleton service from a scoped or transient service.
  • Resolve a scoped service from another scoped or transient service.

By default, in the development environment, resolving a service from another service with a longer lifetime throws an exception. For more information, see Scope validation.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы