在 Activity 之外注入时如何使用 Dagger2 排列组件?
How do I arrange components with Dagger2 when injecting outside of Activities?
所以我已经用 Android 研究了 Dagger2 一段时间,我开始思考如何注入依赖项。我了解对于构建组件,此代码最常见的地方之一是在您的应用程序 class 中。这样我就可以从我的各种活动中调用 getApplication().getMyComponent(),并将相关字段注入 Activity。
但是,假设我有一个 POJO,我想将另一个 POJO 注入其中(比如一个服务对象,其中包含一个 DAO 对象),我正在使用 POJOComponent 注入它。现在,我无法像以前那样在应用程序 class 中构建它,因为我不再注入 Activity(即无法访问 'getApplication()'),所以我的问题是;我应该只在服务对象中构建组件然后注入 DAO 吗?这对我来说似乎不正确,因为如果我想将 DAO 注入到不同的 object/class,我也需要在该对象中构建我的组件。
当然我只需要构建一次我的组件并用于将 DAO 注入不同的 objects/classes?我能想到的一种方法是在 Application class 中使用静态方法,但这感觉像是一种 hack。任何指导将不胜感激!
从不 使用静态方法或变量,如果可以的话。很可能有更好的方法。
如果您有一个 android.app.Service
,该服务本身 is/has 一个 Context
并且您可以轻松地获得 Application
and/or 创建一个新的具有该服务上下文的组件。
然后您可以像注入活动或片段一样注入它。
如果您将 Service 视为某种业务逻辑 class,那么您可以访问构造函数。在这种情况下,你可以——并且应该——利用构造函数注入.
如果你需要MyDao
,把它放在构造函数中。不要养成这样的习惯,即每个 class 都获取并获取它需要的依赖项。如果有东西想使用你的服务,它需要用 dao 来提供它。
无论你在哪里使用你的服务class,那里你都应该考虑如何提供那些依赖。这很可能再次出现在 Activity、应用程序、片段或服务中,正如上面已经指出的那样,您将可以再次访问应用程序和组件。
所以我已经用 Android 研究了 Dagger2 一段时间,我开始思考如何注入依赖项。我了解对于构建组件,此代码最常见的地方之一是在您的应用程序 class 中。这样我就可以从我的各种活动中调用 getApplication().getMyComponent(),并将相关字段注入 Activity。
但是,假设我有一个 POJO,我想将另一个 POJO 注入其中(比如一个服务对象,其中包含一个 DAO 对象),我正在使用 POJOComponent 注入它。现在,我无法像以前那样在应用程序 class 中构建它,因为我不再注入 Activity(即无法访问 'getApplication()'),所以我的问题是;我应该只在服务对象中构建组件然后注入 DAO 吗?这对我来说似乎不正确,因为如果我想将 DAO 注入到不同的 object/class,我也需要在该对象中构建我的组件。
当然我只需要构建一次我的组件并用于将 DAO 注入不同的 objects/classes?我能想到的一种方法是在 Application class 中使用静态方法,但这感觉像是一种 hack。任何指导将不胜感激!
从不 使用静态方法或变量,如果可以的话。很可能有更好的方法。
如果您有一个 android.app.Service
,该服务本身 is/has 一个 Context
并且您可以轻松地获得 Application
and/or 创建一个新的具有该服务上下文的组件。
然后您可以像注入活动或片段一样注入它。
如果您将 Service 视为某种业务逻辑 class,那么您可以访问构造函数。在这种情况下,你可以——并且应该——利用构造函数注入.
如果你需要MyDao
,把它放在构造函数中。不要养成这样的习惯,即每个 class 都获取并获取它需要的依赖项。如果有东西想使用你的服务,它需要用 dao 来提供它。
无论你在哪里使用你的服务class,那里你都应该考虑如何提供那些依赖。这很可能再次出现在 Activity、应用程序、片段或服务中,正如上面已经指出的那样,您将可以再次访问应用程序和组件。