简体   繁体   English

Koin Android:org.koin.error.NoBeanDefFoundException

[英]Koin Android: org.koin.error.NoBeanDefFoundException

Got that message error收到该消息错误

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

But all dependencies were correct.但是所有依赖项都是正确的。

Also I noticed that modules without androidApplication() argument works correctly.我还注意到没有androidApplication()参数的模块可以正常工作。

Code looks like:代码看起来像:

    startKoin(listOf(
            imageManagerModule,
            databaseRepositoryModule
    ))

ImageManager works perfectly ImageManager 完美运行

val imageManagerModule: Module = applicationContext {
    bean { ImageManagerImpl() as ImageManager }
}

But Preferences crashes但是首选项崩溃

val preferencesModule: Module = applicationContext {
    bean { PreferencesImpl(androidApplication()) as Preferences }
}

Solution is easy but not so obvious.解决方案很简单,但不是那么明显。

Somehow Android Studio imported standalone startKoin function instead of specific android function.不知何故,Android Studio 导入了独立的startKoin函数,而不是特定的 android 函数。

So I had to replace所以我不得不更换

import org.koin.standalone.StandAloneContext.startKoin

To

import org.koin.android.ext.android.startKoin

And that works!这有效!

In my case I needed to make like this:就我而言,我需要这样做:

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() }}

}

and use older dependencies:并使用旧的依赖项:

 implementation("org.koin:koin-android:2.0.1")
implementation("org.koin:koin-android-viewmodel:2.0.1")

我有类似的问题,尝试只添加此依赖项,它将被解决

// Room implementation "android.arch.persistence.room:runtime:1.1.1" kapt "android.arch.persistence.room:compiler:1.1.1" .

In my case for another situation it wrote this message:在我的另一种情况下,它写了这条消息:

"org.koin.core.error.NoBeanDefFoundException: No definition found for class:'...Actions'. Check your definitions!" “org.koin.core.error.NoBeanDefFoundException:找不到类的定义:'...Actions'。检查你的定义!”

private val actions: Actions by inject()

var modules = module(override = true) {
    single<Actions> { ActionsImpl(get()) }
}

@Test
fun test() {
    actions.swipe()
}

In this case Actions is an interface.在这种情况下, Actions是一个接口。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Koin Android:注入存储库时org.koin.error.NoBeanDefFoundException - Koin Android: org.koin.error.NoBeanDefFoundException when Inject Repository Android 测试 Koin NoBeanDefFoundException - Android Test Koin NoBeanDefFoundException Android Koin NoBeanDefFoundException仅在应用的发行版中 - Android Koin NoBeanDefFoundException only in release version of app Koin:NoBeanDefFoundException,检查你的模块定义 - Koin: NoBeanDefFoundException, Check your module definitions NoBeanDefFoundException 与 Mock ViewModel,使用 Koin、Espresso 进行测试 - NoBeanDefFoundException with Mock ViewModel, testing with Koin, Espresso Android KOIN CRASH - 错误原因:org.koin.core.error.DefinitionOverrideException:已经存在 [Singleton:'java.lang.String' 的定义 - Android KOIN CRASH - Error Caused by: org.koin.core.error.DefinitionOverrideException: Already existing definition for [Singleton:'java.lang.String' 重复类 Koin org.koin 和 io.insert-koin - Duplicated class Koin org.koin and io.insert-koin org.koin.android.error.MissingAndroidContextException:当尝试使用上下文测试应用程序时 - org.koin.android.error.MissingAndroidContextException: when try to test app with context Koin 注入到 viewModels android - Koin inject to viewModels android Koin 上下文隔离:正确设置并避免随机 NoBeanDefFoundException - Koin Context Isolation: setup correctly and avoid random NoBeanDefFoundException
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM