Может ли Dagger внедрить абстрактный класс Activity без внедрения дочернего класса Activity?

Я пытаюсь внедрить Dagger в свое приложение, и у меня есть экземпляр, в котором мне нужно внедрить поле в класс в иерархии классов Activity, но дочерние элементы этого класса не нуждаются в каких-либо введенных членах. Иерархия выглядит так:

BaseActivity -> NavigationActivity -> HomePageActivity.

Я пытаюсь ввести поле в NavigationActivity, но получаю следующее исключение от Dagger:

java.lang.IllegalArgumentException: No inject registered for members/com.quidsi.diapers.activity.HomePageActivity. You must explicitly add it to the 'injects' option in one of your modules.

Мой модуль выглядит так

@Module(
    injects = NavigationActivity.class
)
public class GestureModule {

    @Provides
    GestureInterface provideGestureInterface() {
        return new MockDrawerGesture();
    }
}

Возможно ли это с помощью Dagger или мне нужно вводить каждый дочерний элемент NavigationActivity?


person Jason Sznol    schedule 29.10.2014    source источник


Ответы (1)


Это невозможно с Dagger 1. Вам также придется вводить действия подкласса. И да, к сожалению, это означает, что вы должны добавить все эти классы в список инъекций в вашем GestureMmodule.

Dagger 2 не за горами, может там что-то изменилось.

person Lasse Magnussen    schedule 04.11.2014
comment
Dagger2 также требует, чтобы подклассы были внедрены, но он выдает ошибку компиляции, а не ошибку времени выполнения, если данный void inject(SomethingActivity somethingActivity) отсутствует в ваших методах интерфейса компонента. - person EpicPandaForce; 31.05.2015