我有一个应用程序组件和相关组件。 该应用程序组件声明显式依赖,并且依赖组件可以注入的。 然而,当我有一个依赖,我有一个@Qualifier的歧义,依赖组件无法注入这种依赖性。
这是应用程序组件
@Component(modules = [AppModule::class, SchedulersModule::class, StorageModule::class])
@ApplicationScope
interface AppComponent {
fun inject(app: Application)
/* other stuff omitted for brevity */
val bitmapCache: BitmapCache
@UiScheduler fun uiScheduler(): Scheduler
}
这是日程安排程序模块:
@Module
class SchedulersModule {
@ApplicationScope
@Provides
@IoScheduler
fun provideIoScheduler(): Scheduler = Schedulers.io()
@ApplicationScope
@Provides
@UiScheduler
fun provideMainThreadScheduler(): Scheduler = AndroidSchedulers.mainThread()
}
这是预选赛:
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class UiScheduler
这是依赖组件:
@Component(
dependencies = [AppComponent::class],
modules = [EditEntryActivityModule::class, ViewModelModule::class]
)
@ActivityScope
interface EditEntryActivityComponent {
fun inject(editEntryActivity: EditEntryActivity)
fun inject(editEntryFragment: EditEntryFragment)
}
这是调度程序是如何在片段注入:
class EditEntryFragment : Fragment() {
@Inject @UiScheduler lateinit var uiScheduler: Scheduler
/* other stuff */
}
那么,为什么可以依赖组件注入位图缓存,在父组件声明,而不是UI调度? 这是我的错误:
error: io.reactivex.Scheduler cannot be provided without an @Provides- or @Produces-annotated method.
io.reactivex.Scheduler is injected at
com.test.edit.EditEntryFragment.uiScheduler
com.test.edit.EditEntryFragment is injected at
com.test.edit.EditEntryActivityComponent.inject(arg0)
1 error