Ответ
Dagger 2 — это популярный DI-фреймворк для Android, который генерирует код на этапе компиляции, обеспечивая производительность.
Ключевые понятия:
- @Module — классы, предоставляющие зависимости (через
@Provides). - @Component — мост между модулями и инжектируемыми классами.
- @Inject — маркирует поля/конструкторы для внедрения зависимостей.
- @Scope (например,
@Singleton) — управляет жизненным циклом зависимостей.
Пример:
@Module
class AppModule {
@Provides
@Singleton
fun provideApi(): ApiService = Retrofit.Builder().build().create()
}
@Component(modules = [AppModule::class])
@Singleton
interface AppComponent {
fun inject(activity: MainActivity)
}
class MainActivity : AppCompatActivity() {
@Inject lateinit var api: ApiService
override fun onCreate() {
DaggerAppComponent.create().inject(this)
}
}
Плюсы:
- Нет рефлексии → высокая производительность.
- Четкая проверка зависимостей на этапе компиляции.
Минусы:
- Сложность настройки для новичков.
- Большой boilerplate-код.
Подходит для средних/крупных проектов, где важна модульность и тестируемость.