Search code examples
androidkodein

When I use ViewModel.Factory, appear `Kodein No binding found for bind<Kodein>()` error


I reference to http://kodein.org/Kodein-DI/?6.1/android#view-model-factory use the kodein viewmodel, appeared the error.

the part code

bind<ViewModelProvider.Factory>() with singleton { KodeinViewModelFactory(instance()) }
class KodeinViewModelFactory(private val kodein: Kodein) : ViewModelProvider.Factory {

  override fun <T : ViewModel> create(modelClass: Class<T>): T =
      kodein.direct.Instance(TT(modelClass))
}

Solution

  • It's quite simple, you just need to directly transfer Kodein to the factory, without instance()

    class KodeinApp : Application(), KodeinAware {
        override val kodein by Kodein.lazy {
        import(androidXModule(this@KodeinApp))
        bind() from singleton { KodeinViewModelFactory(kodein) }
        bind() from singleton { MyViewModel(kodein) }
        }
    }