Create singleton object which implements 2 interfaces

Viewed 62
single<ObserveLifeCycleState> { Communicator( domain = get(), repositoryMessanger = get() ) }

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

As you can see I am instantiating the same 2 objects because it implements both interfaces. But this creates 2 different objects. How can I do it with only one initialization?

2 Answers

Here is an idiomatic way of binding a single instance to multiple interfaces.

single { 
    Communicator(get(), get())
}
single<NewMessageListener> { 
    get<Communicator>()
}
single<ObserveLifeCycleState> {
    get<Communicator>()
}
 single {
        Communicator(
            domain = get(),
            repositoryMessanger = get()
        )
    }
    single {
        val communicator: Communicator = get()

        communicator as NewMessageListener
    }
Related