с кинжалом 2 У меня есть модуль, который вызывает веб-сервис. Мне нужно иметь возможность называть его разными параметрами каждый раз (в основном переключение в бэкэнд, так что только True или False будут меняться). Я не вижу, как передать эти параметры в модуль Dagger 2, кроме как в конструкторе, или с чем-то, введенным как часть инструкции @Provides. Я очень хорошо знаком с DI, так как каждый день занимаюсь Spring, но я не вижу этого аспекта с помощью Dagger 2. В некотором смысле я хочу создать эквивалент Spring @Service или @Component с методами, которые я могу вызвать с помощью соответствующие параметры для прохождения. Что мне не хватает с кинжалом 2?Компонент многоразового использования Dagger 2
Является ли модулем даже правильный объект, который я хочу создать?
ОБНОВЛЕНИЕ: добавлен пример кода.
Модуль:
@Module
public class RecordedProgramWatchedStatusModule {
private int chanId = -1;
private DateTime startTime = null;
private boolean watched;
public RecordedProgramWatchedStatusModule() { }
public RecordedProgramWatchedStatusModule(int chanId, DateTime startTime, boolean watched) {
this.chanId = chanId;
this.startTime = startTime;
this.watched = watched;
}
@Provides
@PerActivity
@Named("updateRecordedProgramWatchedStatus")
UseCase provideGetUserDetailsUseCase(DvrRepository dvrRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) {
return new PostUpdatedRecordedWatchedStatus(chanId, startTime, watched, dvrRepository, threadExecutor, postExecutionThread);
}
}
Observable:
public class PostUpdatedRecordedWatchedStatus extends UseCase {
private final int chanId;
private final DateTime startTime;
private final boolean watched;
private final DvrRepository dvrRepository;
public PostUpdatedRecordedWatchedStatus(final int chanId, final DateTime startTime, final boolean watched, final DvrRepository dvrRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread) {
super(threadExecutor, postExecutionThread);
this.chanId = chanId;
this.startTime = startTime;
this.watched = watched;
this.dvrRepository = dvrRepository;
}
@Override
protected Observable buildUseCaseObservable() {
return this.dvrRepository.updateRecordingWatchedStatus(this.chanId, this.startTime, watched);
}
}
Backend Handler:
@SuppressWarnings("Convert2MethodRef")
@Override
public Observable<Boolean> updateRecordingWatchedStatus(final int chanId, final DateTime startTime, final boolean watched) {
Log.d(TAG, "updateRecordingWatchedStatus : enter");
final DvrDataStore dvrDataStore = this.dvrDataStoreFactory.createMasterBackendDataStore();
return dvrDataStore.updateRecordingWatchedStatus(chanId, startTime, watched)
.doOnError(throwable -> Log.e(TAG, "updateRecordingWatchedStatus : error", throwable))
.doOnCompleted(() -> dvrDataStore.recordedProgramEntityList(true, -1, -1, null, null, null));
}
Используете ли вы только Dagger2 в своем проекте? Я обычно делегировал вызовы Rest и WS для RxJava, поэтому я создаю динамический Observable, который получает параметры и переходит к части кинжала со значением, которое мне нужно. – Leonardo
@ LeonardoFerrari Да, я использую Dagger 2 и RxJava, а также в своем проекте. Архитектура чиста, поэтому весь доступ к данным находится в подпроекте, который вводится обратно в приложение с помощью Dagger 2. Но я просто не вижу, как создать что-то эквивалентное Spring Service, где я могу звонить на него, когда необходимо, не полагаясь на конструктор для ввода этих параметров в модуль. Кажется, это единственные примеры, которые я нахожу. Возможно, то, что я ищу, не является подходящим использованием Dagger2. – dmfrey
Хм, я вижу, попробуйте отправить какой-то код, пожалуйста, я посмотрю, что мы можем сделать! – Leonardo