Android Dagger @Injects имеет значение null

Кинжал надирает мне задницу.

У меня следующая схема.

  • MainActivity, который вводится в граф объекта.
  • MainActivity @Injects интерфейс MainPresenter. Это предоставляется через MainModule, который возвращает конкретную реализацию.
  • Конкретная реализация MainPresenter использует интерфейс FileContentInteractor. Это предоставляется в InteractorModule, который возвращает конкретную реализацию FileContentInteractor.
  • MainModule может сделать это, потому что он включает InteractorModule.class

До сих пор все отлично. С этого момента становится все сложнее.

Конкретная реализация FileContentInteractor вводит некоторые переменные-члены с помощью @Inject. Эти переменные-члены представляют собой все интерфейсы, которым предоставляются конкретные реализации через соответствующие модули.

Примером является @Inject ThreadExecutor threadExecutor. Я думал, что это будет предусмотрено, потому что;

  • InteractorModule включает ExecutorModule.class.
  • ExecutorModule.class @Предоставляет конкретную реализацию ThreadExecutor в форме объекта TaasExecutor.
  • Объект TaskExecutor не имеет внедренных зависимостей.

Когда я запускаю свое приложение и открывается MainActivity, происходит следующее:

  • MainActivity вызывает метод реализации MainPresenter - отлично работает!
  • MainPresenter имеет реализацию FileContentInteractor и вызывает для него метод - работает
  • Метод в реализации FileContentInteractor пытается вызвать метод в реализации ThreadExecutor (который @Injected является переменной-членом). Это не удалось, поскольку реализация @Injected ThreadExecutor имеет значение null.

Кто-нибудь может помочь?


person Stephen    schedule 18.09.2014    source источник


Ответы (1)


Ладно, получается, я надрал себе задницу...

Я ссылался на конкретные классы с моими членами @Inject, но использовал интерфейсы как мои @Provides.

Изменение членов @Inject из классов в интерфейсы исправило это.

person Stephen    schedule 18.09.2014