Sobes.tech
Middle
112
questionbank

Что такое область видимости '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-запросу (например, контекст базы данных или информацию о текущем пользователе), но не должен удерживать состояние между разными запросами или быть "одноразовым" для каждого потребителя в рамках одного запроса.