- Добавление кастомного скоупа между
@PerApplication
и@PerActivity
- Добавление сущности в ActivityScope конкретной Activity
Используются студийные Scope. Общая информация об использовании здесь.
В данном примере некоторый объект EmailData
живет дольше, чем две активити,
но меньше чем приложение. Например, это могут быть данные , который заполнил пользователь.
В случае если он покинул экран по беку, а потом вернулся, необходимо, чтобы
эти данные были предзаполнены.
Управление временем жизни компонента выполняется "в ручную", c помощью
LoginScopeStorage
.
Иногда возникает ситуация, когда надо сделать выделенную область видимости для нескольких активити.
Для этого необходимо:
-
создать аннотацию , например
@PerLogin
-
создать Dagger-компонент, ex. LoginComponent, который будет наследником AppComponent.
-
создать статичное хранилище(LoginScopeStorage), которое будет ответсвенным за время жизни данного компонента. То есть будет уничтожать компонент, когда нет ни одной активити принадлежащей скоупу.
-
в конфигураторе активити
ActivityScreenConfigurator
сменить тип компонента-родителя наLoginComponent
-> в методе getParentComponent() получать компонент через хранилище. Либо создать отдельный конфигуратор для этого скоупа. (LoginActivityScreenConfigurator
). -
не забыть прокинуть EmailData в ActivityComponent, либо в другой компонент (смотри ниже)
-
Создать кастомный компонент
LoginActivityComponent
, который будет иметь скоуп@PerActivity
, зависеть отAppComponent
(Либо от другого вышестояшего скоупа, напримерLoginComponent
как в сэмпле), и наследоваться отActivityComponent
, чтобы не дублировать зависимости. -
Создать модуль с необходимыми зависимостями.
-
Добавить этот модуль к компоненту, а так же прокинуть через него зависимости из
AppComponent
-
Создать
LoginActivityScreenConfigurator
, который будет абтрактным и станет базовым для будущего экрана. Его код будет аналогиченActivityScreenConfigurator
За исключением того, что он будет типизированLoginActivityComponent
'ом