如何使用Dagger2将ApplicationContext注入非活动类?

时间:2016-10-04 05:34:09

标签: android dagger-2 android-application-class

我想要注入几个课程。例如,我有一个 APIContentLoader 类,用于从端点下载JSON,然后将其存储到数据库中。我想将用于读/写数据库的 DatabaseManager 类注入 APIContentLoader 。为了将 DatabaseManager 注入此类,我首先需要对 ApplicationContext 的引用,对吗?

这就是我现在设置的方式:

public class APIContentLoader{
    @Inject DatabaseManager dbm;
    @Inject BaseApplication app;

    public APIContentLoader(){
        app.getAppComponent().inject(this);
        // dbm now is ready for use
    }  
    ... // rest of class stuff
}

我的 BaseApplication 类扩展了标准的Application类。是否以这种方式将 BaseApplication 引用注入此类的不良做法?我知道对ApplicationContext进行静态引用并不是将它们提供给这些非活动类的好方法。

我想最大的问题是,这种方法是否存在与内存管理相同的静态引用问题,并持续存在这些帮助程序类的生命周期?

1 个答案:

答案 0 :(得分:5)

这就是我对你的课程实际上是什么的问题所得到的:

Android组件(活动,服务等)受益于依赖注入,因为它们需要一个无参数构造函数,因此框架可以创建它们的实例。未被Android框架实例化的类应该只接收其作为构造函数参数的依赖项。没有理由在这样的课程中有@Inject个字段。