在运行时初始化依赖项

时间:2016-07-21 09:15:47

标签: android dependency-injection dagger-2

我的应用有三个组件,每个组件都有自己的范围:

  1. Singleton - 用于整个应用程序的生命周期
  2. 活动 - 用于活动的生命周期
  3. 用户 - 在用户登录我们的服务器时使用
  4. 我的一些活动在User组件中具有依赖关系。但是,当用户未登录时,我的某些活动存在,因此在尚未创建用户组件时必须存在。

    如果我的想法是正确的,最好的方法是定义一个额外的组件,给我:

    1. 的Singleton
    2. LoggedOutActivity - 用于注销用户时存在的活动
    3. 用户
    4. LoggedInActivity - 仅适用于用户登录时存在的活动
    5. 因此意味着我的LoggedOutActivities与User组件没有依赖关系,而LoggedInActivities现在可以依赖于User组件。

      创建这个额外的组件,从而分离我的活动显然会给代码增加一些复杂性,所以在我继续之前,我想澄清这听起来像是正确的方法。或者是否有更好的方法可以让我在一个范围内将所有活动联系在一起?

1 个答案:

答案 0 :(得分:1)

这完全取决于你想做什么以及如何做。

首先,你的方法对我来说似乎没问题。如果您有不同的依赖项,则需要不同的组件。这就是组件的用途,这就是你应该如何使用它们。

我个人经常为每项活动都有一个组件。然后我可以使这个组件依赖于它需要的任何其他组件。我不会尝试重复使用相同的组件进行所有活动。

如果要重用代码,可能需要重用 modules 。如果您始终在活动中提供相同的内容(ContextFragmentManager等),请创建一个专用模块来提供这些内容。然后,您可以创建多个组件,这些组件都使用相同的模块来帮助提供活动范围的依赖关系 - 每个活动一个,或者一个依赖于用户,另一个依赖于您描述的应用程序组件。