Попытка использовать koin, но не работает правильно на android - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь внедрить Коин в свой проект. До сих пор я делал это:

Мой класс общих настроек:

class MPCUtilSharedPreference(private val sharedPreferences: SharedPreferences{}

Я хочу добавить этот класс в другие классы. Итак, я создаю свой класс MainApplication:

class MPCMainApplication : Application() {

override fun onCreate() {
    super.onCreate()
    startKoin {
        androidContext(this@MPCMainApplication)
        modules(modules)
    }
}

}

Это мой класс модуля:

private val appModule = module {
single {
    MPCUtilSharedPreference(
        androidContext().getSharedPreferences(
            BuildConfig.APP_PREFERENCE,
            Context.MODE_PRIVATE
        )
    )
  }
}
val modules = listOf(appModule)

И я пытаюсь ввести его:

class MPCNetworkInterceptor : Interceptor {

private val utilSharedPreferences: MPCUtilSharedPreference by inject() }

Ошибка говорит:

Не передано значение для параметра 'clazz *

Я пытаюсь использовать

import org.koin.android.ext.koin.androidContext

Но AS использует

import org.koin.java.KoinJavaComponent.inject

Это мой gradle:

implementation 'org.koin:koin-android:2.1.5'
implementation 'org.koin:koin-androidx-scope:2.1.5'
implementation 'org.koin:koin-androidx-viewmodel:2.1.5'
implementation 'org.koin:koin-androidx-fragment:2.1.5'

Есть идеи о том, в чем здесь проблема?

1 Ответ

1 голос
/ 17 апреля 2020

Вы пытаетесь использовать by inject() делегат из места, которое не является ни действием, ни фрагментом, поэтому среда IDE импортирует:

import org.koin.java.KoinJavaComponent.inject

Если вы хотите использовать MPCUtilSharedPreference из MPCNetworkInterceptor, вы можете передать его как параметр в MPCNetworkInterceptor конструкторе. И, очевидно, добавьте это в свой модуль.

В противном случае вы можете реализовать KoinComponent

...