Dagger - это DI библиотека, основанная на генерации кода. Самой базовой штукой в Dagger'е является компонент, который содержит в себе зависимости, такой компонент еще называют графом зависимостей:
class DaggerComponent {
// фабрика, которая создаёт новый экземпляр зависимости при каждом вызове метода get
private val dependency1 = provide { ... }
// фабрика, которая создаёт новый экземпляр зависимости только при первом вызове метода get, можно сказать что это аналог делегата lazy
private val dependency2 = singleton { ... }
private val dependency3 = provide {
Dependency3(dependency1, dependency2)
}
}Как вы видите зависимости в Dagger компоненте оборачиваются в специальные фабрики, это нужно для ограничения их жизненного цикла: одни зависимости живут в пределах Dagger компонента (Singleton аннотация), другие создаются каждый раз по требованию.
Dagger компонент - это и есть базовая концепция, на которой построена вся библиотека, остальное лишь дополнительные инструменты, которые:
1) указывают как создавать зависимости, например модули
2) указывают как можно сделать inject в классы, которые не находятся в Dagger компоненте, например Activity или Fragment
3) определяют отношения между разными компонентами, например зависимости от одного Dagger компонента передаются другому
4) дополняют всякими штуками, например аннотации IntoSet и IntoMap используются для создания коллекций зависимостей.
Более подробно про кодген Dagger'а можете почитать в моей статье на Github'е.
Пишите в комментах ваше мнение и всем хорошего кода!
