Я конвертирую устаревшую кодовую базу в архитектуру многофункционального модуля и в настоящее время пытаюсь разобраться в настройке своего кинжала, но у меня возникают некоторые проблемы.
У меня есть AppComponent верхнего уровня (AC), который имеет зависимый FeatureLegacyComponent (FLC). AC предоставляет пару именованных планировщиков в модуле, которые я пытаюсь показать FLC, но либо я не понимаю, как все это сваливается, либо в моей установке есть ошибка.
Я не совсем уверен, что лучший способ раскрытия именованных зависимостей, но я написал нечто похожее на это в AC
@Component(
modules = [
AndroidSupportInjectionModule::class,
SchedulerModule::class],
dependencies = [BaseComponent::class,
FeatureLegacyComponent::class]
)
@AppScope
interface AppComponent : AndroidInjector<MainApplication> {
@Named("computation")
fun computationScheduler(): Scheduler
@Named("ui")
fun uiScheduler(): Scheduler
}
С SchedulerModule выглядит как
@Module
class SchedulerModule {
@Provides
@Named("computation")
fun providesComputationScheduler(): Scheduler = Schedulers.computation()
@Provides
@Named("ui")
fun providesUiScheduler(): Scheduler = AndroidSchedulers.mainThread()
@Provides
@Named("io")
fun providesIoScheduler(): Scheduler = Schedulers.io()
}
Но я все еще вижу ошибки, указывающие на то, что планировщик вычислений недоступен в FeatureLegacyComponent
OAuth2TokenRefreshInterceptor getOAuth2TokenRefreshInterceptor();
^
@javax.inject.Named("computation") io.reactivex.Scheduler is injected at
com.meetup.feature.legacy.dagger.BusModule.providesBus(scheduler)
com.meetup.feature.legacy.bus.RxBus is injected at
com.meetup.feature.legacy.http.OAuth2TokenRefreshInterceptor.<init>(…, bus)
com.meetup.feature.legacy.http.OAuth2TokenRefreshInterceptor is provided at
com.meetup.feature.legacy.dagger.FeatureLegacyComponent.getOAuth2TokenRefreshInterceptor()
BusModule является включенным модулем в FLC
@FeatureLegacyScope
@Component(
modules = {
BusModule.class
}
)
public interface FeatureLegacyComponent {...
и BusModule выглядит так:
@Module(includes = {OtherModule.class})
public class BusModule {
@Provides
@FeatureLegacyScope
RxBus providesBus(@Named("computation") Scheduler scheduler) {
return new RxBus(scheduler);
}...
Что дает? Что я тут напортачил?