Как создаётся объект Scope в Dagger

«Как создаётся объект Scope в Dagger» — вопрос из категории DI, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Объект Scope в Dagger создаётся с помощью аннотации @Scope. Она определяет время жизни зависимостей внутри графа компонента.

Пример:

@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class MyCustomScope

Затем компонент помечается этой аннотацией, чтобы ограничить время жизни зависимостей:

@MyCustomScope
@Component
interface MyComponent {
    fun inject(activity: MainActivity)
}

Привязка зависимостей к скоупу:

@Module
class MyModule {
    @MyCustomScope
    @Provides
    fun provideDependency(): MyDependency = MyDependency()
}

Ключевые моменты:

  • Scope не создаёт объекты, а только управляет их временем жизни
  • Для каждого скоупа создаётся отдельный экземпляр зависимости
  • Стандартные скоупы: @Singleton, @ActivityScope, @FragmentScope и т.д.