そのメッセージエラーを得た
_Java.lang.RuntimeException: Unable to create application com.app.name.application.MainApplication: org.koin.error.BeanInstanceCreationException: Can't create bean Bean[class=com.app.name.general.preferences.Preferences] due to error :
org.koin.error.NoBeanDefFoundException: No definition found to resolve type 'Android.app.Application'. Check your module definition
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5830)
at Android.app.ActivityThread.-wrap1(Unknown Source:0)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1673)
at Android.os.Handler.dispatchMessage(Handler.Java:105)
at Android.os.Looper.loop(Looper.Java:172)
at Android.app.ActivityThread.main(ActivityThread.Java:6637)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
Caused by: org.koin.error.BeanInstanceCreationException: Can't create bean Bean[class=com.app.name.general.preferences.Preferences] due to error :
org.koin.error.NoBeanDefFoundException: No definition found to resolve type 'Android.app.Application'. Check your module definition
at org.koin.core.instance.InstanceFactory.createInstance(InstanceFactory.kt:63)
at org.koin.core.instance.InstanceFactory.retrieveInstance(InstanceFactory.kt:26)
at org.koin.KoinContext$resolveInstance$$inlined$synchronized$lambda$1.invoke(KoinContext.kt:85)
at org.koin.KoinContext$resolveInstance$$inlined$synchronized$lambda$1.invoke(KoinContext.kt:23)
at org.koin.ResolutionStack.resolve(ResolutionStack.kt:23)
at org.koin.KoinContext.resolveInstance(KoinContext.kt:80)
at com.app.name.constants.EnvironmentConstants$initEnvironmentVariables$$inlined$getKoinInstance$1$1.invoke(KoinComponent.kt:114)
at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:131)
at com.app.name.constants.EnvironmentConstants$initEnvironmentVariables$$inlined$getKoinInstance$1.getValue(Unknown Source:7)
at com.app.name.constants.EnvironmentConstants.initEnvironmentVariables(EnvironmentConstants.kt:180)
at com.app.name.application.MainApplication.onCreate(MainApplication.kt:59)
at Android.app.Instrumentation.callApplicationOnCreate(Instrumentation.Java:1119)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5827)
... 8 more
_
しかし、すべての依存関係は正しかった。
また、androidApplication()
引数のないモジュールが正しく機能することにも気付きました。
コードは次のようになります。
_ startKoin(listOf(
imageManagerModule,
databaseRepositoryModule
))
_
ImageManagerは完全に機能します
_val imageManagerModule: Module = applicationContext {
bean { ImageManagerImpl() as ImageManager }
}
_
しかし、設定がクラッシュします
_val preferencesModule: Module = applicationContext {
bean { PreferencesImpl(androidApplication()) as Preferences }
}
_
解決策は簡単ですが、それほど明白ではありません。
どういうわけかAndroid Studioは特定のAndroid関数の代わりにスタンドアロンstartKoin
関数をインポートしました。
だから私は交換する必要がありました
import org.koin.standalone.StandAloneContext.startKoin
に
import org.koin.Android.ext.Android.startKoin
そしてそれはうまくいきます!
私は同様の問題がありました、この依存関係を追加するだけで解決されます
// Room implementation "Android.Arch.persistence.room:runtime:1.1.1" kapt "Android.Arch.persistence.room:compiler:1.1.1" .
私の場合、私はこのようにする必要がありました:
import Android.app.Application
import org.koin.Android.ext.koin.androidContext
import org.koin.Android.ext.koin.androidFileProperties
import org.koin.Android.ext.koin.androidLogger
import org.koin.Android.viewmodel.dsl.viewModel
import org.koin.core.context.startKoin
import org.koin.core.module.Module
import org.koin.dsl.module
class MyApplication : Application() {
override fun onCreate(){
super.onCreate()
// start Koin!
startKoin {
// Android context
androidLogger()
androidContext(this@MyApplication)
// use the Android context given there
// load properties from assets/koin.properties file
androidFileProperties()
// modules
modules(myModule)
}
}
val myModule: Module = module { viewModel { MyViewModel() }}
}
古い依存関係を使用します:
implementation("org.koin:koin-Android:2.0.1")
implementation("org.koin:koin-Android-viewmodel:2.0.1")