dependency-injection
class PlayerImpl(private val playerStore: PlayerStore) : AbstractActor(), Player {
... PlayerImpl code
}class KodeinAddressableConstructor(private val kodein: Kodein) : AddressableConstructor {
object KodeinAddressableConstructorSingleton : ExternallyConfigured<AddressableConstructor> {
override val instanceType = KodeinAddressableConstructor::class.java
}
override fun constructAddressable(clazz: Class<out Addressable>): Addressable {
val addressable: Addressable by kodein.Instance(TT(clazz))
return addressable
}
}import orbit.carnival.actors.PlayerImpl
import orbit.carnival.actors.repository.PlayerStore
import orbit.carnival.actors.repository.etcd.EtcdPlayerStore
import org.kodein.di.*
import org.kodein.di.generic.*
fun main() {
runBlocking {
...
val kodein = Kodein {
bind<PlayerStore>() with singleton { EtcdPlayerStore(storeUrl) }
bind<PlayerImpl>() with provider { PlayerImpl(instance()) }
}
val orbitClient = OrbitClient(
OrbitClientConfig(
...
addressableConstructor = KodeinAddressableConstructor.KodeinAddressableConstructorSingleton,
containerOverrides = {
instance(kodein)
}
)
)
...
}
}Last updated
Was this helpful?