【问题标题】:Android Koin simple object inject failAndroid Koin 简单对象注入失败
【发布时间】:2019-09-18 17:58:32
【问题描述】:

我正在尝试学习 Koin 以在 android 中进行依赖注入。我开始按照这个例子来尝试注入非常简单的对象,但是我得到了NoBeanDefFoundException: No definition found for ...的错误@

这是我的代码

Gradle

// Koin
    def koin_version = '2.0.1'
    implementation "org.koin:koin-androidx-scope:$koin_version"
    implementation "org.koin:koin-androidx-viewmodel:$koin_version"
    implementation "org.koin:koin-androidx-ext:$koin_version" 

应用程序 onCreate()

override fun onCreate() {
        super.onCreate()

        startKoin{
            androidLogger()
            androidContext(this@Application)
            listOf(applicationModule)
        }

    }

Modules.kt

val applicationModule = module {
    factory { UserSession("email","password") }
}

但是当我尝试将它作为private val userSession: UserSession by inject() 注入到任何地方(应用程序、活动、片段)时,我得到了上述错误。我错过了什么吗?

【问题讨论】:

    标签: android kotlin koin


    【解决方案1】:

    您可能对语法感到困惑,您应该调用方法modules 并为其提供您想要启动的模块。

    listOf 返回值在您的情况下被忽略,您应该这样做:

    startKoin {
        androidLogger()
        androidContext(this@Application)
        modules(applicationModule)
    }
    

    Reference

    【讨论】:

      【解决方案2】:

      试试这个。

      KoinApp.kt

      class KoinApp : MultiDexApplication() {
          override fun onCreate() {
              super.onCreate()
              startKoin(this, listOf(appModule))
          }
      }
      

      appModule.kt

      @JvmField
          val appModule = module {
               single { DataRepository(get()) } 
          }
      

      【讨论】:

        【解决方案3】:

        答案会起作用,但为了以后的校对,我仍然会拥有这份清单。

        startKoin {
        androidLogger()
        androidContext(this@Application)
        modules(listOf(applicationModule))
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-23
          相关资源
          最近更新 更多