Ответ
При выборе DI-библиотеки учитывай:
- Производительность – время инициализации, влияние на сборку (Koin легче, Dagger быстрее в runtime).
- Кривая обучения – Dagger сложнее, Koin/Hilt проще.
- Поддержка мультимодульности – Dagger с
@Component/@Subcomponent, Koin с модулями. - Annotation processing (kapt) – Dagger требует, что замедляет сборку. Hilt (надстройка над Dagger) упрощает настройку.
- Гибкость – ручное управление скоупами (Dagger) vs автоматическое (Koin).
Пример для Hilt:
@HiltAndroidApp
class App : Application()
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideRepo(): Repo = RepoImpl()
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity()
Для Koin:
val appModule = module {
single<Repo> { RepoImpl() }
}
class App : Application() {
override fun onCreate() {
startKoin { modules(appModule) }
}
}
Выбор зависит от проекта: для сложных – Dagger/Hilt, для быстрого старта – Koin.