This is how I\'m trying to provide my ViewModelFactory:
@Suppress(\"UNCHECKED_CAST\")
@Singleton
class ViewModelFactory @Inject constructor(
First of all ViewModelFactory shouldn't be a Singleton. Anyway to fix this you should have:
a ViewModelFactory
class ViewModelFactory @Inject constructor(
private val creators: Map
bind this factory in your module class
@Binds
abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
have a ViewModelKey
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
@MapKey
annotation class ViewModelKey(val value: KClass
bind your viewModel in the desired module
@Binds
@IntoMap
@ViewModelKey(MyViewModel::class)
abstract fun bindCustomViewModel(viewModel: MyViewModel): ViewModel
then implement and use your viewModel
@Inject
lateinit var viewModelFactory: ViewModelFactory
private val viewModel: MyViewModel by viewModels { viewModelFactory }
This solution is tested with Kotlin 1.3.72 and latest version of Dagger2.
Also please check at https://github.com/android/architecture-components-samples/tree/master/GithubBrowserSample
Hope this will help you.