如何使用Kodein懒惰注入类?

时间:2019-04-03 14:50:30

标签: android kotlin dependency-injection lazy-initialization kodein

我需要使用Kodein在Kotlin Android应用程序中为我的存储库(也称为工作单元)编写包装。 看起来像这样,并将在RepositoriesModule中注册:

class RepositoryWrapper(val first : FirstRepository, val second : SecondRepository) : Wrapper

object RepositoriesModule {
    val module = Kodein.Module(name = "RepositoriesModule") {
    bind<FirstRepository>() with provider {
        AndroidFirstRepository()
    }
    bind<SecondRepository>() with provider {
        AndroidSecondRepository()
    }
    bind<Wrapper>() with provider {
        RepositoryWrapper(instance(), instance())
    }

然后,我将包装器作为其他类注入:

class Interactor(private val wrapper : Wrapper) {
    //logic
}

问题是我认为,当我注入Wrapper时,其所有属性都将被初始化。这不是很好,所以我想让它们变得懒惰,并仅在需要时对其进行初始化(例如wrapper.first)。我阅读了一些Kodein文档,并找到了可能的解决方案:

class RepositoryWrapper(val kodein: Kodein) : Wrapper {
    val first: FirstRepository by kodein.instance()
    val second: SecondRepository by kodein.instance()
}

还有另一种进行惰性注入的方法:实现KodeinAware

这是通过延迟初始化来创建属性的唯一方法,还是可以在不显式添加Kodein属性的情况下进行操作?

0 个答案:

没有答案