使用Dagger 2 pre v2.10注入ViewModel

时间:2019-05-09 21:40:54

标签: viewmodel dagger-2 android-viewmodel

我有一个大项目,我打算注入文档中所见的ViewModel:

@Singleton
class ViewModelFactory @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.asIterable().firstOrNull { modelClass.isAssignableFrom(it.key) }?.value
            ?: throw IllegalArgumentException("unknown model class $modelClass")

    return try {
        creator.get() as T
    } catch (e: Exception) {
        throw RuntimeException(e)
    }

}
}

@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
@MapKey
internal annotation class ViewModelKey(val value: KClass<out ViewModel>)


@Module
abstract class ViewModelModule {
@Binds
internal abstract fun bindViewModelFactory(viewModelFactory: ViewModelFactory): ViewModelProvider.Factory

@Binds
@IntoMap
@ViewModelKey(InitializationViewModel::class)
internal abstract fun bindInitializationViewModel(myViewModel: InitializationViewModel): ViewModel
}

但是我遇到的问题是我找不到在Dagger 2.10之前的版本中注入方法。我曾尝试使用Android Injectors将庞大的项目迁移到Dagger 2.21,但我浪费了3天,没有成功。

有人能做到吗?

谢谢

0 个答案:

没有答案