У меня есть rx.subjects.Subject
в моих Presenter
, PublishSubject.java
, если быть точным. Потому что я следую шаблону DI для создания моих объектов и справочных соавторов, используя их супертипы, мне нужно ввести Subject
, но PublishSubject
(кроме того, последнее из final
не является макетным).Как вводить rx.subjects.Subject <T, T> с кинжалом
Для того, чтобы отличить различные варианты от Subject
, я представил аттестацию: @Publish
.
@Qualifier @Retention(RUNTIME) public @interface Publish { }
объявили его Module
:
@Module(// ...)
public class MyModule {
@Provides @Publish Subject provideSubject() {
return PublishSubject.create();
}
}
И указал в Presenter
:
public class Presenter {
Subject<Void, Void> mSubject;
@Inject public Presenter(@Publish Subject subject) {
mSubject = subject;
}
}
Так, в конце Dagger
(первая версия) жалуется, что не может найти Subject<Void, Void>
, Так может быть и общий вопрос: как вводить общий интерфейс?
В какой строке он жалуется? Я предполагаю, что введенный конструктор? –
Первый кинжал не знает о его ошибках, но это определенно из-за зависимости, объявленной в конструкторе. – Eugene
Можете ли вы изменить тип параметра и возврат метода предоставления на 'Subject'? –