Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Пример создания собственного Scope

Используются студийные Scope. Общая информация об использовании здесь.

В данном примере некоторый объект EmailData живет дольше, чем две активити, но меньше чем приложение. Например, это могут быть данные , который заполнил пользователь. В случае если он покинул экран по беку, а потом вернулся, необходимо, чтобы эти данные были предзаполнены. Управление временем жизни компонента выполняется "в ручную", c помощью LoginScopeStorage.

Добавление кастомного скоупа между @PerApplication и @PerActivity

Иногда возникает ситуация, когда надо сделать выделенную область видимости для нескольких активити.

Для этого необходимо:

  • создать аннотацию , например @PerLogin

  • создать Dagger-компонент, ex. LoginComponent, который будет наследником AppComponent.

  • создать статичное хранилище(LoginScopeStorage), которое будет ответсвенным за время жизни данного компонента. То есть будет уничтожать компонент, когда нет ни одной активити принадлежащей скоупу.

  • в конфигураторе активити ActivityScreenConfigurator сменить тип компонента-родителя на LoginComponent -> в методе getParentComponent() получать компонент через хранилище. Либо создать отдельный конфигуратор для этого скоупа. (LoginActivityScreenConfigurator).

  • не забыть прокинуть EmailData в ActivityComponent, либо в другой компонент (смотри ниже)

Добавление сущности в ActivityScope конкретной Activity

  • Создать кастомный компонент LoginActivityComponent, который будет иметь скоуп @PerActivity, зависеть от AppComponent(Либо от другого вышестояшего скоупа, например LoginComponent как в сэмпле), и наследоваться от ActivityComponent, чтобы не дублировать зависимости.

  • Создать модуль с необходимыми зависимостями.

  • Добавить этот модуль к компоненту, а так же прокинуть через него зависимости из AppComponent

  • Создать LoginActivityScreenConfigurator, который будет абтрактным и станет базовым для будущего экрана. Его код будет аналогичен ActivityScreenConfigurator За исключением того, что он будет типизирован LoginActivityComponent'ом