我需要使用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
属性的情况下进行操作?