Начал внедрять Dagger в свое приложение, и у меня возникли проблемы с инициализацией очень простого поля. Вот сокращенная версия моего кода:
@Inject public DaggerUtils daggerUtils;
public class AppState extends Application {
@Override
public void onCreate() {
super.onCreate();
// Set up Dagger
AppModule appModule = new AppModule();
mObjectGraph.create(appModule);
daggerUtils.print();
}
}
Используемый модуль:
@Module(
injects = { AppState.class}
)
public class AppModule {
// This provides method is commented out because from what I can understand from the Dagger documentation
// Dagger should automatically take care of calling the constructor I have provided
// with the @Inject annotation. I have tried commenting this out as well and it still
// fails.
//@Provides
//DaggerUtils provideDaggerUtils() {
// return new DaggerUtils();
//}
}
Базовый класс утилиты:
public class DaggerUtils {
@Inject
public DaggerUtils() {
}
public void print(){
Logger.e("Dagger", "printed instantiated");
}
}
Итак, насколько я понимаю, поскольку у меня есть аннотация @Inject перед конструктором DaggerUtils и аннотация @Inject перед экземпляром DaggerUtils, который я использую в своем классе AppState, Dagger должен позаботиться об инициализации экземпляра DaggerUtils без вызова конструктора. . Однако он продолжает выдавать мне исключение NullPointerException, когда я пытаюсь вызвать daggerUtils.print() (строка 12 в классе AppState). Почему кинжал не инициализирует DaggerUtils? Я чувствую, что мне здесь не хватает чего-то очень простого. Я также пытался использовать метод @Provides, закомментированный в AppModule, для предоставления экземпляра DaggerUtils, но он все еще не работает.