首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Koin安卓: org.koin.error.NoBeanDefFoundException

Koin安卓: org.koin.error.NoBeanDefFoundException
EN

Stack Overflow用户
提问于 2018-07-05 23:48:35
回答 3查看 19.4K关注 0票数 10

收到该消息错误

代码语言:javascript
复制
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()参数的模块可以正常工作。

代码看起来像这样:

代码语言:javascript
复制
    startKoin(listOf(
            imageManagerModule,
            databaseRepositoryModule
    ))

ImageManager完美工作

代码语言:javascript
复制
val imageManagerModule: Module = applicationContext {
    bean { ImageManagerImpl() as ImageManager }
}

但是首选项崩溃了

代码语言:javascript
复制
val preferencesModule: Module = applicationContext {
    bean { PreferencesImpl(androidApplication()) as Preferences }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-05 23:48:35

解决方案很简单,但不是那么明显。

不知怎么的,Android Studio导入了独立的startKoin函数,而不是特定的android函数。

所以我不得不换掉

代码语言:javascript
复制
import org.koin.standalone.StandAloneContext.startKoin

代码语言:javascript
复制
import org.koin.android.ext.android.startKoin

这是可行的!

票数 10
EN

Stack Overflow用户

发布于 2020-03-23 23:15:47

在我的例子中,我需要这样做:

代码语言:javascript
复制
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() }}

}

并使用较旧的依赖关系:

代码语言:javascript
复制
 implementation("org.koin:koin-android:2.0.1")
implementation("org.koin:koin-android-viewmodel:2.0.1")
票数 2
EN

Stack Overflow用户

发布于 2019-03-27 15:16:33

我也有类似的问题,试着添加这个依赖就可以解决

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51195471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档