Обновление, глядя на пример кода:
@Provides
public TestPresenter getTestPresenter() {
return new TestPresenter();
}
Поскольку вы создаете его самостоятельно, предполагается, что вы имели дело с любыми уколами. Удалите этот метод, и он вызовет конструктор по умолчанию (впрыскивание туда, если необходимо), а затем посетит любой другой сайт внедрения.
Еще одна проблема, с которой вы можете столкнуться: существует несколько ссылок HandlerManager, убедитесь, что все ваши ссылки на HandlerManager используют один и тот же пакет.
Оригинальный ответ:
Они будут нулевыми, когда конструктор работает, но это имеет смысл - как они могут быть любым другим значением, когда инжектор еще не успел назначить все поля. Подумайте, как это могло бы работать (выражается здесь как сомнительно законная Java, поскольку поля могут быть не публичными):
InstanceToInject instance = new InstanceToInject(...);
instance.field = provideFieldValue();
К тому времени, когда поле даже может быть назначено, ваш конструктор уже запущен.
Если поле имеет значение NULL при запуске другого метода, убедитесь, что метод не запускается конструктором , а после того, как внедрение завершило свою работу. Другие случаи, когда он еще может быть нулевым, будут @Inject
аннотируемыми сеттерами.
Предполагая, что это не один из этих случаев (самый простой способ проверить это, установив точку останова и убедившись, что инжектор не находится в стеке вызовов), убедитесь, что поле имеет @Inject
, и что оно не привязан к нулевому экземпляру.