如何使用 Dagger2 将 ApplicationContext 注入非 activity class?
How do I inject the ApplicationContext to a non-activity class using Dagger2?
我有几个 class 想要注入。例如,我有一个 APIContentLoader class 用于从端点下载 JSON 然后将其存储到数据库。我想将我为 reading/writing 制作的 DatabaseManager class 注入到数据库 APIContentLoader 中。为了将 DatabaseManager 注入此 class,我首先需要引用 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 class 扩展了标准应用程序 class。以这种方式将 BaseApplication 引用注入此 class 是一种不好的做法吗?我知道对 ApplicationContext 进行静态引用并不是让这些非 activity classes 可用的好方法。
我想最大的问题是,这种方法是否存在与静态引用相同的问题,就像内存管理和这些助手 classes 的生命周期保持一样?
这就是我关于你的 class 实际是什么的问题:
Android 组件(活动、服务等)受益于依赖注入,因为它们需要无参数构造函数,以便框架可以创建它们的实例。未由 Android 框架实例化的 class 应该简单地接收其依赖项作为构造函数参数。没有理由在这样的 class.
中包含 @Inject
字段
我有几个 class 想要注入。例如,我有一个 APIContentLoader class 用于从端点下载 JSON 然后将其存储到数据库。我想将我为 reading/writing 制作的 DatabaseManager class 注入到数据库 APIContentLoader 中。为了将 DatabaseManager 注入此 class,我首先需要引用 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 class 扩展了标准应用程序 class。以这种方式将 BaseApplication 引用注入此 class 是一种不好的做法吗?我知道对 ApplicationContext 进行静态引用并不是让这些非 activity classes 可用的好方法。
我想最大的问题是,这种方法是否存在与静态引用相同的问题,就像内存管理和这些助手 classes 的生命周期保持一样?
这就是我关于你的 class 实际是什么的问题:
Android 组件(活动、服务等)受益于依赖注入,因为它们需要无参数构造函数,以便框架可以创建它们的实例。未由 Android 框架实例化的 class 应该简单地接收其依赖项作为构造函数参数。没有理由在这样的 class.
中包含@Inject
字段