В моем проекте Android есть два модуля: модуль приложения и модуль lib.
Оба эти двух модуля нуждаются в Koin для D.I., поэтому я вызываю startKoin
в MyApplication
классе в модуле приложения и IninKointContentProvider
в модуле lib, как показано ниже.
// app module
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin(this, modules1)
}
}
// lib module
class InitKoinContentProvider : ContentProvider() {
override fun onCreate(): Boolean {
startKoin(context.applicationContext, modules2)
return true
}
}
Затем приложение упало и показало это сообщение
Caused by: org.koin.error.BeanOverrideException: Try to override definition with Single [class='android.content.Context'], but override is not allowed. Use 'override' option in your definition or module.
Полагаю, startKoin
можно вызвать только один раз.
Решение, которое я нашел, заключается в объединении двух модулей koin с последующим вызовом startKoin
в MyApplication
, но мне это не нравится. Модуль Lib может быть импортирован другим Android-проектом, который не использует koin, в этом случае, я думаю, что лучше вызывать startKoin
в InitKoinContentProvider
.
Любое решение для этой проблемы ?? Спасибо!