1
開始向我的應用程序中引入Dagger,並且在初始化非常基本的字段時遇到問題。下面是我的代碼的簡化版本:使用匕首未在Android中初始化注入字段
@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");
}
}
所以從我個人理解,因爲我之前的@Inject註解DaggerUtils構造函數和我在AppState類中使用的DaggerUtils實例之前的@Inject註解,Dagger應該照顧初始化DaggerUtils實例,而不必調用構造函數。然而,當我嘗試調用daggerUtils.print()(AppState類中的第12行)時,它總是給我一個NullPointerException。爲什麼匕首不初始化DaggerUtils?我覺得我在這裏錯過了一些非常基本的東西。我也試着用AppModule中註釋掉的@Provides方法來提供一個實例化的DaggerUtils,但它仍然不起作用。
好的,有效的。我仍然有點困惑。調用mObjectGraph.create(appModule).inject(this)並在模塊中使用injects = {MyClass.class}之間有什麼區別? – odiggity
injects = {MyClass.class}就像聲明一樣,appModule會注入這個類。如果在沒有聲明的情況下調用mObjectGraph.create(appModule).inject(this),則會發生異常 – Daggeto