Объясните механизм действия Scope в Dagger и как он управляет временем жизни объектов
Answer from AI
sobes.tech AI
В Dagger Scope используется для управления временем жизни и областью видимости создаваемых зависимостей. Аннотация Scope позволяет ограничить создание объекта одним экземпляром в рамках определённого жизненного цикла.
Например, если у вас есть скоуп @Singleton, то объект с этим скоупом будет создан один раз на весь жизненный цикл компонента (обычно приложения). Если скоупом является, например, @ActivityScope, то объект будет создан один раз на время жизни Activity.
Механизм работы:
- Скоупы связываются с компонентами Dagger.
- При запросе зависимости с определённым скоупом Dagger проверяет, есть ли уже созданный экземпляр в этом скоупе.
- Если есть — возвращает его, если нет — создаёт новый и сохраняет для повторного использования.
Это позволяет эффективно управлять ресурсами и гарантировать, что объекты с определённой областью видимости не будут создаваться заново без необходимости.
Пример:
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class ActivityScope
@ActivityScope
@Component(modules = [SomeModule::class])
interface ActivityComponent {
fun inject(activity: SomeActivity)
}
Здесь все зависимости с аннотацией @ActivityScope будут жить столько же, сколько и компонент ActivityComponent.