Коротко о Dagger2
Component/SubComponent
Module
Scope
Способы inject-а
Основные элементы(аннотации) Dagger 2:
@Inject
– базовая аннотация, с помощью которой “запрашивается зависимость”@Module
– классы, чьи методы “предоставляют зависимости”@Provide
– методы внутри@Module
, “говорящие Dagger, как мы хотим сконструировать и предоставить зависимость“@Component
– мост между@Inject
и@Module.
Или другими словами, Компонент представляет собой готовый граф зависимостей.@Scope
– предоставляют возможность создания глобальных и “локальных синглтонов”@Qualifier
– если необходимы разные объекты одного типа
Отличие от первой версии
Кодогенерация. Полученный код понятен и доступен для отладки.
Никаких проблем при обфускации. Dagger1 работал на рефлексии. Отсюда проблемы с производительностью, обфускацией, загадочными падениями в рантайме.
Component dependencies
Данный способ связи перекачивал из Dagger 1.
Особенности Component dependencies:
- Два зависимых компонента не могут иметь одинаковый scope.
- Родительский компонент в своем интерфейсе должен явно задавать объекты, которыми могут пользоваться зависимые компоненты.
- Компонент может зависеть от нескольких компонент.
Subcomponents
Фича уже Dagger2.
Особенности:
- Необходимо прописывать в интерфейсе родителя метод получения Сабкомпонента (упрощенное название Subcomponent)
- Для Сабкомпонента доступны все объекты родителя
- Родитель может быть только один