- Добавление кастомного скоупа между
@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'ом