在活动之外注入时,如何使用Dagger2安排组件?

时间:2016-05-16 17:03:11

标签: java android dependency-injection dagger-2

所以我一直在玩Android的Dagger2一点点,我开始围绕如何​​注入依赖关系。我理解,对于构建组件,此代码的一个更常见的位置是在Application类中。这样我可以从我的各种活动中调用getApplication()。getMyComponent(),并将相关字段注入Activity。

但是,假设我有一个POJO并且我想在其中注入另一个POJO(比如一个带有DAO对象的Service对象)并且我使用POJOComponent注入它。现在,我不能像之前那样在Application类中构建它,因为我不再注入Activity(即无法访问'getApplication()'),所以我的问题是这个;我应该只在Service对象中构建组件然后注入DAO吗?这对我来说似乎不正确,因为如果我想将DAO注入到不同的对象/类中,我还需要在该对象中构建我的组件。

当然,我应该只需构建一次我的组件并用于将DAO注入不同的对象/类中吗?我能想到的一种方法是在Application类中使用静态方法,但这感觉就像一个黑客。任何指导将不胜感激!

1 个答案:

答案 0 :(得分:1)

从不使用静态方法或变量,如果可以避免的话。最有可能是更好的方式。

如果您有android.app.Service,那么该服务本身就是Context,您可以轻松获取Application和/或使用该服务上下文创建新组件。

然后你可以像活动或碎片一样注入它。

如果您将 Service 称为某种业务逻辑类,那么您可以访问构造函数。在这种情况下,你可以 - 应该使用构造函数注入

如果您需要MyDao,请将其放在构造函数中。不要养成习惯,每个班级都要抓住并接受它所需要的依赖。如果某些东西想要使用你的服务,它需要提供dao。

无论您在何处使用Service类 ,都应该考虑 如何提供这些依赖项。这很可能会再次出现在Activity,Application,Fragment或Service中,如上所述 - 您可以再次访问应用程序和组件。