Dagger没有在Android中初始化注入的字段

时间:2014-05-02 20:11:25

标签: android dagger

开始将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");
    }
}

所以根据我的理解,因为我在DaggerUtils构造函数之前有@Inject注释,而我在AppState类中使用的DaggerUtils实例之前的@Inject注释,Dagger应该注意初始化DaggerUtils实例而不必我调用构造函数。但是当我尝试调用daggerUtils.print()(AppState类中的第12行)时,它一直给我一个NullPointerException。为什么匕首没有初始化DaggerUtils?我觉得我在这里缺少一些非常基本的东西。我也尝试使用AppModule中注释掉的@Provides方法来提供实例化的DaggerUtils但它仍然无法正常工作。

1 个答案:

答案 0 :(得分:2)

今晚我遇到同样的问题。

对于需要注射的每个班级,您必须致电:

mObjectGraph.create(appModule).inject(this);

这对于在Application中创建注入方法很有用。

public void inject(Object object) {
    mObjectGraph.inject(object);
}