Я пытаюсь связать два компонента с Dagger2 (версия 2.17). Один - это вид активности GWT (MainView.class
), а другой - сложный виджет, в который встроены некоторые функции отображения (CarteWidget.class
).
Я хотел бы определить действие как @Component
, которое содержит, в частности, @Subcomponent
, чтобы содержать зависимости CarteWidget.
Вот мой основной компонент и его модуль:
@Lvl1Scope
@Component(modules = Lvl1Module.class)
public interface Lvl1Component {
MainView getMainView();
}
@Module(subcomponents = CarteSubComponent.class)
public class MainModule {
@Provides
public MainView provideMainView (CarteSubComponent.Builder carteBuilder) {
return new MainView (carteBuilder.build().getCarte());
}
}
И мой подкомпонент и его модуль:
@CarteScope
@Subcomponent(modules = CarteModule.class)
public interface CarteSubComponent {
CarteWidget getCarte();
@Subcomponent.Builder
interface Builder {
CarteSubComponent build();
}
@Module
public class CarteModule {
}
}
Это работает, но мне это не нравится, я предпочел внедрить мой CarteWidget в мой MainView без использования метода @Provides. Так что мой основной модуль содержит только способ получить CarteWidget из подкомпонента:
@Module(subcomponents = CarteSubComponent.class)
public class Lvl1Module {
@Provides
public CarteWidget provideCarte(CarteSubComponent.Builder carteBuilder) {
return carteBuilder.build().getCarte();
}
}
Но с этим очень небольшим изменением я получил бесконечный цикл , потому что метод provideCarte Lvl1Module
вызывается при выполнении carteBuilder.build().getCarte()
...
Если я добавляю метод-производитель CarteWidget
в свой подкомпонент, я получаю сообщение об ошибке, что для типа CarteWidget
найдены две привязки, это правда.
Мне нужно, чтобы мой Lvl1Component мог внедрить субкомпонент в свой график, и я хочу позволить субкомпоненту выбрать реализацию для использования. Это возможно с субкомпонентом? Что я не так понял?