尝试使用 koin 但无法在 android 上正常工作
Trying to use koin but doesnt work correctly on android
我正在尝试在我的项目中实施 Koin。到目前为止,我这样做了:
我的共享偏好 class:
class MPCUtilSharedPreference(private val sharedPreferences: SharedPreferences{}
我想在其他 class 中注入 class。所以,我创建了我的 MainApplication class:
class MPCMainApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@MPCMainApplication)
modules(modules)
}
}
}
这是我的模块class:
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() }
错误说:
No value passed for parameter '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'
知道这里的问题是什么吗?
您正在尝试从既不是 Activity 也不是 Fragment 的地方使用 by inject()
委托,这就是 IDE 导入的原因:
import org.koin.java.KoinJavaComponent.inject
如果您想使用 MPCNetworkInterceptor
中的 MPCUtilSharedPreference
,您可以将其作为参数传递给 MPCNetworkInterceptor
构造函数。显然,将其添加到您的模块中。
否则,您可以实施 KoinComponent
我不知道,为什么 koin
在使用 by inject()
时无法建议 org.koin.android.ext.android.inject
路径,但我使用以下代码片段解决了这个问题:
private val foo: FooClass by KoinJavaComponent.inject(FooClass::class.java)
我正在尝试在我的项目中实施 Koin。到目前为止,我这样做了:
我的共享偏好 class:
class MPCUtilSharedPreference(private val sharedPreferences: SharedPreferences{}
我想在其他 class 中注入 class。所以,我创建了我的 MainApplication class:
class MPCMainApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@MPCMainApplication)
modules(modules)
}
}
}
这是我的模块class:
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() }
错误说:
No value passed for parameter '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'
知道这里的问题是什么吗?
您正在尝试从既不是 Activity 也不是 Fragment 的地方使用 by inject()
委托,这就是 IDE 导入的原因:
import org.koin.java.KoinJavaComponent.inject
如果您想使用 MPCNetworkInterceptor
中的 MPCUtilSharedPreference
,您可以将其作为参数传递给 MPCNetworkInterceptor
构造函数。显然,将其添加到您的模块中。
否则,您可以实施 KoinComponent
我不知道,为什么 koin
在使用 by inject()
时无法建议 org.koin.android.ext.android.inject
路径,但我使用以下代码片段解决了这个问题:
private val foo: FooClass by KoinJavaComponent.inject(FooClass::class.java)