Что такое область видимости 'scoped' в C#?
Answer from AI
sobes.tech AI
Область видимости 'scoped' в C# относится, как правило, к времени жизни сервисов в контейнере зависимостей ASP.NET Core. Сервис с областью видимости 'scoped' создается один раз за время обработки HTTP-запроса и повторно используется всеми компонентами, зависящими от него внутри этого же запроса.
Особенности 'scoped' сервисов:
- Creation: Создается при первом запросе к нему в рамках жизненного цикла HTTP-запроса.
- Sharing: Один и тот же экземпляр используется для всех зависимостей в рамках одного HTTP-запроса.
- Disposal: Уничтожается в конце обработки HTTP-запроса.
Пример регистрации 'scoped' сервиса:
// В методе ConfigureServices класса Startup
public void ConfigureServices(IServiceCollection services)
{
// Регистрация MyScopedService в контейнере зависимостей с областью видимости 'scoped'
services.AddScoped<IMyScopedService, MyScopedService>();
}
Сравнение с другими областями видимости ('Transient', 'Singleton'):
| Область видимости | Время жизни | Создание |
|---|---|---|
'Transient' |
Каждый раз при запросе | Новый экземпляр при каждом resolv'е |
'Scoped' |
Один раз за HTTP-запрос | Один экземпляр на HTTP-запрос |
'Singleton' |
Один раз за всё время жизни приложения | Один экземпляр на всё приложение |
Применение 'scoped' полезно, когда сервис должен хранить состояние, относящееся к текущему HTTP-запросу (например, контекст базы данных или информацию о текущем пользователе), но не должен удерживать состояние между разными запросами или быть "одноразовым" для каждого потребителя в рамках одного запроса.