- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们在使用 ContributesAndroidInjector
指定的模块时遇到 Dagger2 问题在编译时未被识别。
// This doesn't work
@Module
abstract class ActivityBuildersModule {
@ContributesAndroidInjector(
modules = [
FragmentBuildersModule::class,
FeatureViewModelModule::class,
]
)
abstract fun contributeMainActivity(): MainActivity
}
这是我们的模块,它会导致以下错误:
javax.inject.Provider<androidx.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.
如果我们将声明提升到类级别,一切都会按预期运行:
// This works
@Module(includes = [
FeatureViewModelModule::class,
])
abstract class ActivityBuildersModule {
@ContributesAndroidInjector(
modules = [
FragmentBuildersModule::class,
]
)
abstract fun contributeMainActivity(): MainActivity
}
请注意,此问题并非 FeatureViewModelModule 独有。如果放在@ContributesAndroidInjector 中,任何提供某种依赖关系的模块都将无法工作。
有趣的是,是否有一个 project在 GitHub 上似乎可以毫无问题地做同样的事情。我能看到的项目之间的唯一区别是我们的项目使用 Kotlin 而他们的项目使用 Java。
一些进一步的信息:
class MyApplication : DaggerApplication(){
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent.builder().application(this).build()
}
}
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
ActivityBuildersModule::class,
AppModule::class]
)
interface AppComponent : AndroidInjector<MyApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): AppComponent
}
}
@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.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)
}
}
}
@Suppress("unused")
@Module
abstract class FeatureViewModelModule {
@Binds
@IntoMap
@ViewModelKey(FeatureViewModel::class)
abstract fun bindCompanyViewModel(featureViewModel: FeatureViewModel): ViewModel
}
有人知道会发生什么吗?
最佳答案
对于@contributionAndroidInject
,请删除摘要
@Module
interface ActivityBuilderModule {@ContributesAndroidInjector fun contributeAuthActivity(): MainActivity}
关于java - Kotlin、Dagger2、MVVM 和 ContributesAndroidInjector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56403184/
我在向需要此对象的依赖项提供 Activity 对象时遇到问题。 我对 Dagger 2.13 有一个非常标准的设置,如下所示: AppComponent.java @Singleton @Compo
我有一个 ServiceBinderModule在我的 Android 应用程序中负责添加我所有的 Service s 到 DI 图是这样的: @ContributesAndroidInjector
我正在测试 dagger 的新功能:Android 模块。当我使用 @ContributesAndroidInjector 时,我无法编译代码我总是收到以下错误: 错误:(12, 8) 错误:dagg
我们在使用 ContributesAndroidInjector 指定的模块时遇到 Dagger2 问题在编译时未被识别。 // This doesn't work @Module abstract
我正在尝试找出一种更少样板的方式来实现在我的所有应用程序 Activity 中使用的 ActivityModule。这是我目前的设置: ActivityModule: @Module class Ac
我有一个使用@ContributesAndroidInjector 注释(https://google.github.io/dagger/android.html)的 Dagger 设置。
我正在探索 Dagger 2.11 中的新 dagger.android。我希望不必创建像 @PerActivity 这样的自定义范围注释。到目前为止,我能够执行以下操作: 1) 定义应用程序范围单例
我正在使用 Dagger 2在我的项目中进行依赖注入(inject) 问题是当我试图在依赖于 FragmentManager 的 fragment 类中注入(inject) ViewPageAdapt
我正在尝试设置 Dagger 2.12,但出现此错误: 错误:使用了@dagger.android.ContributesAndroidInjector,但在处理器路径上找不到dagger.andro
我是一名优秀的程序员,十分优秀!