gpt4 book ai didi

dependency-injection - 在 Kodein 依赖注入(inject)中,如何将 Kodein 本身的实例注入(inject)到实例中?

转载 作者:行者123 更新时间:2023-12-01 00:39:10 27 4
gpt4 key购买 nike

在 Kodein 中,我将模块导入到父模块中,有时这些类需要一个 Kodein 实例,以便以后可以自己进行注入(inject)。问题是这段代码:

val parentModule = Kodein {
import(SomeService.module)
}
在哪里 SomeService.module稍后需要 Kodein 实例,但尚未创建 Kodein。稍后将其传递到模块中似乎是个坏主意。
在科丁 3.x我看到有 kodein-conf具有全局实例的模块,但我想避免使用全局实例。
其他模块或类如何获取 Kodein 实例?
注:这个问题是作者有意编写和回答的 ( Self-Answered Questions),因此常见的 Kotlin/Kodein 主题的惯用答案出现在 SO 中。

最佳答案

在科丁 3.x (可能还有旧版本)您可以访问任何模块初始化中的属性 kodein您可以在绑定(bind)中使用。

在您的模块中,绑定(bind)如下所示:

bind<SomeService>() with singleton { SomeService(kodein) }

对于一个完整的示例并使用接口(interface)与实现的分离,它可能看起来像这样:
interface SomeService {
// ...
}

class DefaultSomeService(val kodein: Kodein): SomeService {
companion object {
val module = Kodein.Module {
bind<SomeService>() with singleton { DefaultSomeService(kodein) }
}
}

val mapper: ObjectMapper = kodein.instance()
// ...
}

您可以按照您的说明从父模块导入模块,它将收到对当前 Kodein 实例的自己的引用。
val kodein = Kodein {
import(DefaultSomeService.module)
}

关于dependency-injection - 在 Kodein 依赖注入(inject)中,如何将 Kodein 本身的实例注入(inject)到实例中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com