Мы пытаемся интегрировать нашу веб-инфраструктуру Wicket (1.4.x) с внедрением зависимостей Dagger. Для этого мы создали инжектор компонента Wicket:
class DaggerComponentInjector
extends ConfigurableInjector
implements IComponentInstantiationListener {
...
@Override
public Object inject(Object object, IFieldValueFactory factory) {
if (!AppModule.canInject(object.getClass())) {
return object;
}
final DaggerGraphHolder holder = Application.get().getMetaData(DaggerGraphHolder.GRAPH_KEY);
holder.getGraph().inject(object);
return object;
}
@Override
public void onInstantiation(Component component) {
inject(component);
}
...
Он проверяет, содержит ли где-либо класс объекта @Inject, а затем вызывает Dagger для внедрения зависимостей.
К сожалению, это не работает:
public class LogoutPage extends WebPage {
@Inject
private AuthenticationService authenticationService;
...
}
На нашей странице выхода вводится служба. Но когда мы переходим на страницу, происходит следующее:
Caused by: java.lang.IllegalArgumentException: No inject registered for members/com.myapp.LogoutPage. You must explicitly add it to the 'injects' option in one of your modules.
at dagger.ObjectGraph$DaggerObjectGraph.getInjectableTypeBinding(ObjectGraph.java:309)
at dagger.ObjectGraph$DaggerObjectGraph.inject(ObjectGraph.java:290)
У нас сотни таких занятий.
Как решить эту проблему БЕЗ ручного добавления всех классов в массив инъекций @Module (или создания метода провайдера)?