首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kodein依赖注入中,如何将Kodein自身的实例注入实例?

在Kodein依赖注入中,如何将Kodein自身的实例注入实例?
EN

Stack Overflow用户
提问于 2016-07-25 16:16:53
回答 1查看 2.2K关注 0票数 4

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

代码语言:javascript
复制
val parentModule = Kodein {
    import(SomeService.module)
}

例如,SomeService.module以后需要Kodein,但是Kodein还没有创建。稍后将其传递到模块似乎是个坏主意。

在Kodein 3.x中,我看到有一个具有全局实例的kodein-conf模块,但我希望避免全局实例。

其他模块或类如何获得Kodein实例?

备注:这个问题是作者(https://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)故意写和回答的,所以常见的Kotlin/Kodein主题的习语答案就在中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-25 16:16:53

在Kodein 3.x (可能是旧版本)中,您可以访问可以在绑定中使用的任何称为kodein的模块初始化中的属性。

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

代码语言:javascript
复制
bind<SomeService>() with singleton { SomeService(kodein) }

对于一个完整的示例,并使用接口与实现的分离,它可能如下所示:

代码语言:javascript
复制
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实例的引用。

代码语言:javascript
复制
val kodein = Kodein {
    import(DefaultSomeService.module)
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38572796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档