Мне нужно написать оболочку для моих репозиториев (она также называется Unit of Work) в приложении Kotlin для Android с использованием Kodein.
Это будет выглядеть примерно так и будет зарегистрировано в 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
?