Как интегрировать Wicket и Dagger?

Мы пытаемся интегрировать нашу веб-инфраструктуру 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 (или создания метода провайдера)?


person stephanos    schedule 28.10.2014    source источник
comment
возможный дубликат Использовать модули Dagger без директивы injects   -  person Gimby    schedule 28.10.2014
comment
не имеет отношения к этой проблеме, но срок службы Wicket 1.4 истек. Вы действительно должны использовать Wicket 6.x   -  person Martijn Dashorst    schedule 28.11.2014