Быстро пробежимся по теоретическим аспектам.
Dagger 2 представляет собой библиотеку, которая помогает разработчику реализовать паттерн Внедрение зависимости (Dependency Injection), который в свою очередь является "специфичной формой инверсии управления (Inversion of control)
Два класса, использующие друг друга называются связанными (‘coupled’). Связь между классами может быть либо сильной (‘tight’), либо слабой (‘loose’). Зависимости всегда направлены.
Большое количество зависимостей в классе приводит к проблемам сильных связей (hard dependency), что плохо по следующим причинам:
Есть множество типов зависимостей, но можно выделить основные: