我刚刚开始在准备进行测试的android(替代Dagger 2)项目中使用Koin lib。我在模块中的android应用上下文有问题:
val M = module {
val ctx = androidApplication() //here error
}
Koin在App类中启动:
import android.app.Application
import android.content.Context
import org.koin.android.ext.android.startKoin
class App : Application() {
override fun onCreate() {
super.onCreate()
startKoin(this, listOf(M))
}
}
我得到日志:
D/App: onCreate()
I/KOIN: [context] create
E/KOIN: [ERROR] - Error while resolving instance for class 'android.app.Application' - error: org.koin.error.NoBeanDefFoundException: No compatible definition found for type 'Application'. Check your module definition
然后应用崩溃 我是否错过了Koin的配置?在目标项目中,我有一些模块完全依赖于应用程序上下文。而且我不想使用对此上下文的全局引用。
尽量不要val
为applicationAndroid()
上下文创建一个,而是直接在工厂/单个闭包内部将其用作您的依赖项之一的参数。我在项目中正在做的事情是这样的:
val appModule = module(override = true) {
factory<Navigator> { MyNavigator(androidApplication()) }
}
MyNavigator类为:
class MyNavigator(private val context: Context): Navigator {
override fun goToDetail(detailId: String) {
context.startActivity(DetailActivity.getIntent(context, detailId))
}
}
ps:我还对Koin 1.0.0做过一些实验,我注意到您还可以编写类似以下内容的内容:
val appModule = module(override = true) {
factory<Navigator> { MyNavigator(get()) }
}
这get()
将会为您检索的背景下,即使有在图中的上下文情况下,不依赖; 既不是工厂也不是单身人士。Koin可能在幕后做了一些事情。我试图将其与其他类型的依赖项一起使用,但它无法正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句