开始将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();
//}
}
基本的util类:
public class DaggerUtils {
@Inject
public DaggerUtils() {
}
public void print(){
Logger.e("Dagger", "printed instantiated");
}
}
因此,据我了解,因为我在AppState类中使用的DaggerUtils构造函数之前有@Inject批注,在DaggerUtils实例之前有@Inject批注,所以Dagger应该负责初始化DaggerUtils实例,而无需调用构造函数。但是,当我尝试调用daggerUtils.print()(AppState类中的第12行)时,它一直为我提供NullPointerException。为什么Dagger不初始化DaggerUtils?我觉得我在这里错过了一些非常基本的东西。我还尝试使用AppModule中注释掉的@Provides方法来提供实例化的DaggerUtils,但它仍然无法正常工作。
最佳答案
我今晚有同样的问题。
对于每个需要注射的班级,您都必须致电:
mObjectGraph.create(appModule).inject(this);
这对于在Application中创建注入方法很有用。
public void inject(Object object) {
mObjectGraph.inject(object);
}