在Koltin中尝试实现Dagger 2之后,我面临一个小问题,我几乎尝试了在Stack over Flow和其他文章上在其他主题中看到的所有内容,但没有任何解决方法,这就是我的错误面对,如果任何人可以帮忙或指导我解决问题,谢谢
error: [Dagger/MissingBinding] java.util.Map<java.lang.Class<? extends androidx.lifecycle.ViewModel>,? extends javax.inject.Provider<androidx.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.
public abstract interface MainComponent extends dagger.android.AndroidInjector<com.example.foodapp.di.BaseApplication> {
^
java.util.Map<java.lang.Class<? extends androidx.lifecycle.ViewModel>,? extends javax.inject.Provider<androidx.lifecycle.ViewModel>> is injected at
com.example.foodapp.di.DiComponents.ViewModelProviderFactory(creators)
com.example.foodapp.di.DiComponents.ViewModelProviderFactory is injected at
com.example.foodapp.MainActivity.provider
com.example.foodapp.MainActivity is injected at
@Module
abstract class AuthViewModelsModule {
@Binds
@IntoMap
@ViewModelKey(MainViewModel::class)
abstract fun bindAuthViewModel(viewModel: MainViewModel): ViewModel?
}
@MustBeDocumented
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@MapKey
internal annotation class ViewModelKey(val value: KClass<out ViewModel>)
lass ViewModelProviderFactory @Inject constructor(private val creators: Map<Class<out ViewModel>, Provider<ViewModel>>) :
ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
var creator: Provider<out ViewModel>? = creators[modelClass]
if (creator == null) { // if the viewmodel has not been created
// loop through the allowable keys (aka allowed classes with the @ViewModelKey)
for ((key, value) in creators) {
// if it's allowed, set the Provider<ViewModel>
if (modelClass.isAssignableFrom(key)) {
creator = value
break
}
}
}
// if this is not one of the allowed keys, throw exception
requireNotNull(creator) { "unknown model class $modelClass" }
// return the Provider
return try {
creator.get() as T
} catch (e: Exception) {
throw RuntimeException(e)
}
}
companion object {
private const val TAG = "ViewModelProviderFactor"
}
}
@Component(modules = [AndroidSupportInjectionModule::class,AndroidBuildersModule::class, ViewModelFactoryModule::class, AppModule::class])
interface MainComponent : AndroidInjector<BaseApplication>{
@Component.Builder
interface toBuild
{
@BindsInstance
fun Building(application: Application) : toBuild
fun build() : MainComponent
}
}
答案 0 :(得分:1)
您似乎忘记了将AuthViewModelsModule.class
添加到AppComponent类中的模块中