Что такое scope у DI фреймворков

«Что такое scope у DI фреймворков» — вопрос из категории DI, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Scope в DI (Dependency Injection) определяет жизненный цикл объекта, управляемого контейнером. Основные типы:

  1. Singleton – один экземпляр на всё приложение.
  2. Activity/ViewModelScope – экземпляр живет, пока живет Activity/ViewModel.
  3. FragmentScope – привязан к жизненному циклу Fragment.
  4. CustomScope – пользовательская область видимости.

Пример в Hilt:

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
    @Singleton
    fun provideSingletonDep(): MyDep = MyDep()
}

@Module
@InstallIn(ActivityComponent::class)
object ActivityModule {
    @ActivityScoped
    fun provideActivityDep(): MyDep = MyDep()
}

Неправильное использование scope может привести к утечкам памяти (например, если зависимость ActivityScope переживет саму Activity).