我该如何使用Dagger2将ApplicationContext注入到非Activity类中呢?

3
我有几个需要注入的类,例如我有一个名为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不是使其可用于这些非活动类的好方法。

我想重要的问题是,这种方法是否存在与静态引用相同的内存管理和持久化这些辅助类的生命周期的问题?


APIContentLoader 真的只是像这里展示的那样扩展了 Object,还是它实际上是一个 Loader - Kevin Krumwiede
同时:“我知道创建一个静态引用来访问应用上下文并不是一个好的方式……” 我不确定这是正确的。 - Kevin Krumwiede
@KevinKrumwiede 这只是一个对象。在进一步实现之前,我认为我需要更好地理解依赖注入。我旨在实现MVP结构,并能够将所有辅助类(用于下载/存储数据)注入到Presenter中。 - Le2e410
1个回答

6
这就是我关于你班级实际上是什么的问题所想表达的:
Android 组件(activity、service 等)因需要无参构造函数以供框架创建其实例,从而受益于依赖注入。一个不由 Android 框架实例化的类应该只需将其依赖作为构造函数参数接收即可。这样的类中没有必要有 @Inject 字段。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接