Я пытался использовать Dagger2 для внедрения ViewModelProvider.Factory
реализации, как в этом примере: GithubBrowserExample Я скопировал точно такой же класс, однако при попытке построить я получаю следующую ошибку:
error: [Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.arch.lifecycle.ViewModel>,javax.inject.Provider<android.arch.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.
Я потратил 2 дня, пытаясь найти решение, и все было связано с подстановочными знаками и использованием аннотации @JvmSuppressWildcards
, которую я уже использовал в своем классе, я также пытался изменить Map
для MutableMap
в сигнатуре конструктора, только чтобы получить ту же ошибку, пока я случайно не удалил @Singleton
из:
@Singleton
class GithubViewModelFactory @Inject constructor(
private val creators: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
val creator = creators[modelClass] ?: creators.entries.firstOrNull {
modelClass.isAssignableFrom(it.key)
}?.value ?: throw IllegalArgumentException("unknown model class $modelClass")
try {
@Suppress("UNCHECKED_CAST")
return creator.get() as T
} catch (e: Exception) {
throw RuntimeException(e)
}
}
}
, и после этого мой проект скомпилировался, и эта досадная ошибка исчезла!что я делаю не так?