Быстро пробежимся по теоретическим аспектам.

Dagger 2 представляет собой библиотеку, которая помогает разработчику реализовать паттерн Внедрение зависимости (Dependency Injection), который в свою очередь является "специфичной формой инверсии управления (Inversion of control)

Что такое зависимость?

Два класса, использующие друг друга называются связанными (‘coupled’). Связь между классами может быть либо сильной (‘tight’), либо слабой (‘loose’). Зависимости всегда направлены.

Чем плохи зависимости?

Большое количество зависимостей в классе приводит к проблемам сильных связей (hard dependency), что плохо по следующим причинам:

Типы зависимостей

Есть множество типов зависимостей, но можно выделить основные: