Создать одноэлементный объект, который реализует 2 интерфейса - PullRequest
0 голосов
/ 14 марта 2020
single<ObserveLifeCycleState> { Communicator( domain = get(), repositoryMessanger = get() ) }

single<NewMessageListener> { Communicator( domain = get(), repositoryMessanger = get() ) }

Как видите, я создаю экземпляры тех же двух объектов, потому что он реализует оба интерфейса. Но это создает 2 разных объекта. Как я могу сделать это только с одной инициализацией?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Вот идиоматический c способ привязки одного экземпляра к нескольким интерфейсам.

single { 
    Communicator(get(), get())
}
single<NewMessageListener> { 
    get<Communicator>()
}
single<ObserveLifeCycleState> {
    get<Communicator>()
}
0 голосов
/ 15 марта 2020
 single {
        Communicator(
            domain = get(),
            repositoryMessanger = get()
        )
    }
    single {
        val communicator: Communicator = get()

        communicator as NewMessageListener
    }
...