Как лениво вводить уроки с помощью кодеина? - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно написать оболочку для моих репозиториев (она также называется 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?

...