Я очень новая для кинжала - я даже не знаю, если это будет работать для моего приложенияЛомать циклическую зависимость в Dagger
У меня есть страница поиска, которая возвращает последние новости о данной знаменитости ,
Я написал тест, чтобы проверить, что результаты появляются на странице, когда мы ищем популярную знаменитость.
page
имеет searchField
, который требует в своем конструкторе page
, поэтому для этого я могу использовать веб-драйвер для своих тестов.
Знаменитости Поиск Страница Тест
public class CelebritySearchPageTest {
@Test
public void testSearchResultsForKevinBaconVerifyHisPopularity() {
CelebritySearchPage searchPage = new CelebritySearchPage();
searchPage.searchFor("Kevin Bacon");
Assert.assertTrue(searchPage.getNumberOfResults() > 9999999, "Verify that Kevin Bacon is still relevant");
}
}
Знаменитости Поиск Страница
public class CelebritySearchPage extends Page {
@Inject
@Named("search field")
TextField searchField;
public void searchFor(String text) {
searchField.setText(text);
// ...
}
public int getNumberOfResults() {
// ...
}
}
Знаменитости Поиск Страница Модуль
@Module(injects = CelebritySearchPage.class)
public class CelebritySearchPageModule {
@Provides
@Named("search field")
public TextField provideSearchField() {
return new TextField(/* How do I get the page? */, "#searchField");
}
}
Page
public abstract class Page {
// ...
}
Text Field
public class TextField {
protected Page page;
protected String selector;
public TextField(Page page, String selector) {
this.page = page;
this.selector = selector;
}
public void setText(String text) {
// ...
}
}
Проблема заключается в том, что page
потребности searchField
, но searchField
потребности page
. Как мне преодолеть эту циклическую зависимость?
Я не могу инициализировать searchField
внутри CelebritySearchPage
Почему TextField нужна страница? –
@AndreasFrische 'textField.getFullSelector()' вызывает 'page.getFullSelector()' – michaelsnowden
ok. Может быть, тогда введет FullSelectorHolder. Или используйте «Lazy»: «Иногда вам нужен объект, создаваемый лениво. Для любой привязки T вы можете создать Lazy, который исправляет создание экземпляра до первого вызова метода get() Lazy . –