如何修复Koin lib中的“未找到类型'Context'的兼容定义”?

露娜·沃尔波

我刚刚开始在准备进行测试的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的配置?在目标项目中,我有一些模块完全依赖于应用程序上下文。而且我不想使用对此上下文的全局引用。

尼科洛·帕索伦吉

尽量不要valapplicationAndroid()上下文创建一个而是直接在工厂/单个闭包内部将其用作您的依赖项之一的参数。我在项目中正在做的事情是这样的:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

未找到类型定义

如何修复C中的“不兼容的指针类型”错误?

Java中兼容类型的形式定义(声音)

如何在Context xml文件中的Tomcat中定义UserDatabase?

如何修复类型的参数与类型的参数不兼容

如何使用Vaadin Flow CallBackDataProvider修复“不兼容类型”错误

如何从不兼容的指针类型修复传递“ count”的参数1

如何修复不兼容的块指针类型发送错误

不兼容的类型:FirebaseMessagingService无法转换为Context

不兼容的类型:Widget 无法转换为 Context

如何修复 Laravel Lighthouse 中的“未找到 `whereHasConditions` 的指令”?

如何修复 django rest 框架中的“未找到错误路径”

如何修复Mybatis中的“无效的绑定语句(未找到)”?

如何修复git-bash中的“ bfg:命令未找到”

如何修复熊猫中的``未找到级别''错误?

如何修复Ubuntu中的“ conda:未找到”错误

如何修复Heroku部署中未找到的错误

如何修复 Codeigniter 中未找到请求的 URL 错误

如何以32/64位兼容方式在C#中定义MAPINAMEID结构?

如何在超类中定义一个方法,使其与任何子类兼容?

如何设计自定义 ip(axi 兼容)以从 DDR 读取和写入(在 Xilinx Vivado 中)

如何解决Outlook中自定义表格标签的不兼容问题

自定义类型与混合不兼容

Haskell 函数不兼容的类型和定义

如何使自定义控件与errorProvider兼容?

如何使自定义类与For Each兼容?

如何修复Java中的“不兼容类型:SomeObject无法转换为CAP#1”错误

如何修复 C# 中的“方法的类型签名与 PInvoke 不兼容”错误

如何修复C ++中的多个定义错误?