Dependency injection 在Kodein依赖项注入中,如何将Kodein自身的实例注入到实例中?
在Kodein中,我将模块导入到父模块中,有时这些类需要Kodein的实例,以便以后可以自己进行注入。问题在于此代码:Dependency injection 在Kodein依赖项注入中,如何将Kodein自身的实例注入到实例中?,dependency-injection,kotlin,kodein,Dependency Injection,Kotlin,Kodein,在Kodein中,我将模块导入到父模块中,有时这些类需要Kodein的实例,以便以后可以自己进行注入。问题在于此代码: val parentModule=Kodein{ 导入(SomeService.module) } 其中,SomeService.module需要稍后使用Kodein实例,但Kodein尚未创建。稍后将其传递到模块中似乎是个坏主意 在Kodein3.x中,我看到有一个具有全局实例的Kodein conf模块,但我想避免使用全局实例 其他模块或类如何获取Kodein实例 注意:
val parentModule=Kodein{
导入(SomeService.module)
}
其中,SomeService.module
需要稍后使用Kodein实例,但Kodein尚未创建。稍后将其传递到模块中似乎是个坏主意
在Kodein
3.x
中,我看到有一个具有全局实例的Kodein conf
模块,但我想避免使用全局实例
其他模块或类如何获取Kodein实例
注意:这个问题是作者有意编写和回答的(),因此,常见问题Kotlin/Kodein主题的惯用答案出现在so中。在Kodein
3.x中(可能还有旧版本)您可以在名为kodein
的任何模块的初始化中访问一个属性,您可以在绑定中使用该属性
在您的模块中,绑定看起来像:
bind<SomeService>() with singleton { SomeService(kodein) }
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()
// ...
}
val kodein = Kodein {
import(DefaultSomeService.module)
}