Kotlin dagger 2 Android ViewModel 注入错误答案

您所在的位置:网站首页 viewmodelproviderfactory Kotlin dagger 2 Android ViewModel 注入错误答案

Kotlin dagger 2 Android ViewModel 注入错误答案

2023-04-07 01:37| 来源: 网络整理| 查看: 265

我正在尝试在我的 Android 应用程序上使用 dagger 2 从 arch android 库中注入新的 ViewModel。

从我在这个样本上看到的https://github.com/googlesamples/android-architecture-components/tree/e33782ba54ebe87f7e21e03542230695bc893818/GithubBrowserSample 我需要使用这个:

@MustBeDocumented @Target(AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) @Retention(AnnotationRetention.RUNTIME) @MapKey internal annotation class ViewModelKey(val value: KClass) @Module abstract class ViewModelModule { @Binds @IntoMap @ViewModelKey(LoginViewModel::class) internal abstract fun bindLoginViewModel(viewModel: LoginViewModel): LoginViewModel @Binds @IntoMap @ViewModelKey(MainMenuViewModel::class) internal abstract fun bindSearchViewModel(viewModel: MainMenuViewModel): MainMenuViewModel @Binds internal abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory } @ApplicationScope @Component(modules = arrayOf(ApplicationModule::class, NetworkModule::class, ViewModelModule::class)) interface ApplicationComponent { fun plusActivityComponent(activityModule: ActivityModule): ActivityComponent fun inject(application: LISAApplication) }

而我的工厂是:

@ApplicationScope class ViewModelFactory @Inject constructor(private val creators: Map) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { var creator: Provider? = creators[modelClass] if (creator == null) { for ((key, value) in creators) { if (modelClass.isAssignableFrom(key)) { creator = value break } } } if (creator == null) { throw IllegalArgumentException("unknown model class " + modelClass) } try { return creator.get() as T } catch (e: Exception) { throw RuntimeException(e) } } }

但是项目没有编译:(我有这个错误(没有@Provides-annotated方法就无法提供Map。):

Using Kotlin incremental compilation :mobile:transformDataBindingWithDataBindingMergeArtifactsForDebug UP-TO-DATE :mobile:kaptDebugKotlin e: /Users/jaumard/LISAProjects/LISA/mobile/build/tmp/kapt3/stubs/debug/com/mylisabox/lisa/dagger/components/ApplicationComponent.java:6: error: [com.mylisabox.lisa.dagger.components.ActivityComponent.inject(com.mylisabox.lisa.common.BaseActivity)] java.util.Map


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3