kotlin - Kodein 构造函数注入 Kodein$NotFoundException
问题描述
出于某种原因,我无法让构造函数注入与 Kodein 一起使用。
这是重现异常的代码:
import org.kodein.di.Kodein
import org.kodein.di.direct
import org.kodein.di.generic.bind
import org.kodein.di.generic.instance
import org.kodein.di.generic.provider
fun main(args: Array<String>) {
val kodein = Kodein {
bind<Test2>() to provider { Test2() }
bind<Test>() to provider { Test(instance()) }
}
val test = kodein.direct.instance<Test>()
}
class Test(val test2: Test2)
class Test2
例外:
Exception in thread "main" org.kodein.di.Kodein$NotFoundException: No binding found for bind<Test>() with ? { ? }
Registered in this Kodein container:
at org.kodein.di.internal.KodeinContainerImpl.factory(KodeinContainerImpl.kt:174)
at org.kodein.di.KodeinContainer$DefaultImpls.factory$default(KodeinContainer.kt:33)
at org.kodein.di.KodeinContainer$DefaultImpls.provider(KodeinContainer.kt:80)
at org.kodein.di.internal.KodeinContainerImpl.provider(KodeinContainerImpl.kt:7)
at org.kodein.di.KodeinContainer$DefaultImpls.provider$default(KodeinContainer.kt:79)
at org.kodein.di.internal.DKodeinBaseImpl.Instance(DKodeinImpl.kt:33)
at AppKt.main(App.kt:20)
为什么这不起作用?
解决方案
bind<Test2>() to provider { Test2() }
^^
这是 Kotlin 的to
函数,它生成一个Pair
与 Kodein 的 DSL 无关的函数:p
Kodein 的 DSL 使用with
:
bind<Test2>() with provider { Test2() }
^^^^
请注意,当您将类型绑定到自身时,可以使用更简单的语法:
bind() from provider { Test2() }
推荐阅读
- html - Angular如何遍历组件类文件数组并渲染它们的模板
- c# - 使用具有指定列的 OpenXml 在 Excel 中插入新行
- python - 如何仅在scrapy spider中每个http请求成功后才执行方法?
- java - Java:LinkedList 插入返回“列表为空”
- python - Kaggle.json 未从 Kaggle 帐户下载
- javascript - 用选定的选项填充文本区域
- swiftui - Master-Detail-View:在视图之间跳转
- react-native - React Native FlatList 不适用于对象
- google-cloud-platform - 有没有办法检查 GCP (HTTP) 云函数中的请求/响应标头而不显式记录它们?
- r - Quanteda - 从具有多个文档的数据框创建语料库