Ich habe eine App-Komponente und eine abhängige Komponente. Die App-Komponente deklariert explizite Abhängigkeiten und die abhängige Komponente kann diese injizieren. Wenn ich jedoch eine Abhängigkeit habe, die ich mit einem @Qualifier disambiguieren muss, ist die abhängige Komponente nicht in der Lage, diese Abhängigkeit zu injizieren.Dolch2 und Qualifier in abhängigen Komponenten
Dies ist die App Komponente
@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
}
Dieses das Planungsmodul ist:
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class UiScheduler
Und das ist die abhängige Komponente:
@Module
class SchedulersModule {
@ApplicationScope
@Provides
@IoScheduler
fun provideIoScheduler(): Scheduler = Schedulers.io()
@ApplicationScope
@Provides
@UiScheduler
fun provideMainThreadScheduler(): Scheduler = AndroidSchedulers.mainThread()
}
Dies ist der Qualifier ist
@Component(
dependencies = [AppComponent::class],
modules = [EditEntryActivityModule::class, ViewModelModule::class]
)
@ActivityScope
interface EditEntryActivityComponent {
fun inject(editEntryActivity: EditEntryActivity)
fun inject(editEntryFragment: EditEntryFragment)
}
Dies ist, wie der Scheduler in dem Fragment injiziert wird:
class EditEntryFragment : Fragment() {
@Inject @UiScheduler lateinit var uiScheduler: Scheduler
/* other stuff */
}
Warum kann die abhängige Komponente, die die Bitmap-Cache injizieren, in der übergeordneten Komponente deklariert, aber nicht der UI-Scheduler? Das ist der Fehler, den ich bekommen:
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
Dies ist syntaktisch falsch (Sie vermissen die Anführungszeichen auf UiScheduler), aber egal, dies ist für eine '@ Named' Annotation, ich verwende derzeit Qualifier. Die selbe Lösung trifft nicht zu oder zumindest nicht so, wie ich es beurteilen kann. Gibt es eine Variante dieses '@ field' Fixes für Abhängigkeiten mit' @Qualifier'? – Francesc
Ich weiß es nicht. Vielleicht kannst du "@Named" ausprobieren. – Garywzh
Danke, aber die Frage ist spezifisch für Qualifikanten. – Francesc