如何使用Dagger 2.10 Android Injector为@SessionScope和@ActivityScope提供依赖?

时间:2017-08-22 03:16:54

标签: android dagger-2 dagger

假设您有一个应用程序,用户在第一个屏幕上登录,从那一刻开始,您就可以访问User对象。我想在@SessionScope下提供这种依赖关系 - 这意味着,当用户注销时,通过注释为@SessionScope的组件提供的所有依赖关系都将会死亡。

尽管通过@SessionScope提供了依赖项,但我希望通过@ActivityScope提供依赖项,例如ActivityPresenter,当然,我必须提供{{1}的依赖项}和@SessionScope一起加入@ActivityScope个消费者类。

使用Dagger 2新Activity功能做到最好的是什么?

到目前为止,我能够在AndroidInjector下提供依赖关系,如下所示:

@ActivityScope

1 个答案:

答案 0 :(得分:3)

教程

  1. 创建名为@SessionScope;
  2. 的自定义范围
  3. 创建一个名为SessionActivityBinding的类:
    • 添加一个方法,该方法将绑定将在会话范围下提供的活动子组件 - 可以找到有关此实现的更多详细信息here;
  4. 创建名为SessionComponent的子组件:
    • 使用在步骤1中创建的自定义范围注释此子组件;
    • 创建@Subcomponent.Builder并添加一个接收User对象作为参数的方法;
      • 使用@BindsInstance;
      • 注释此方法
      • 添加此方法fun build(): SessionComponent以便允许提供此SessionComponent - 这是在用户登出时释放此组件所必需的;
    • SessionActivityBinding类添加到模块数组中;
    • [可选] :添加SessionModule类以提供应在@SessionScope下提供的依赖项;
  5. AppModule上添加SessionComponent作为子组件;
  6. AppModule;
  7. 的模块列表中添加AppComponent
  8. 当用户成功对系统进行身份验证并获取User对象时,请创建一个SessionComponent的实例,该实例必须保持有效直到用户注销;
  9. 每当用户注销时,请丢弃SessionComponent的旧实例,例如:sessionComponent = null - 这将放弃@SessionScope下提供的所有依赖项;
  10. 每当用户再次登录时,请重复步骤6中的过程;
  11. 可以找到更多详细信息和示例here;