Ответ
Dagger — это compile-time DI-фреймворк, генерирующий код на этапе компиляции. Он строго типизирован, требует аннотаций (@Module, @Inject и т.д.), но обеспечивает высокую производительность.
Koin — легковесный runtime DI, работающий на рефлексии. Не требует кодогенерации, проще в настройке, но менее производительный и без проверки зависимостей на этапе компиляции.
Пример Dagger:
@Module
class AppModule {
@Provides
fun provideRepository(): Repository = RepositoryImpl()
}
Пример Koin:
val appModule = module {
single<Repository> { RepositoryImpl() }
}
Выбор зависит от проекта: Dagger — для больших приложений с акцентом на производительность, Koin — для быстрого старта и простоты.