代码之家  ›  专栏  ›  技术社区  ›  liminal

匕首2.13:构造函数注入类的控制范围

  •  1
  • liminal  · 技术社区  · 7 年前

    我正在使用Dagger Android 2.13,正在设置活动范围的依赖项。

    我了解如何为模块内声明的依赖项指定范围:

    @Module
    public class MyActivityModule {
        @Provides
        @PerActivity
        MyActivityDataRepo provideMyActivityDataRepo() {
            return MyActivityDataRepo(); // simplified for the sake of clarity
        }
    } 
    

    但我该如何指定通过构造函数注入添加到依存关系图中的类的范围呢?

    class MyActivityOtherDataRepo {
    
        @Inject
        MyActivityOtherDataRepo() {
        } 
    } 
    

    有什么方法可以将这个类活动的范围限定为 MyActivity ?

    或者,一旦将其注入到 我的活动 通过会员注入?如果是这样,有没有办法将范围限定为 我的活动 只有我所能想到的就是 MyActivityOtherDataRepo 包private并将其放置在与 我的活动 .

    1 回复  |  直到 7 年前
        1
  •  2
  •   David Medenjak    7 年前

    可以通过以下方式确定元素的范围:

    • 注释 @Provides @Binds 带范围的注释方法

      @Provides
      @PerActivity
      MyActivityDataRepo provideMyActivityDataRepo() { /*...*/}
      
    • 或者通过构造函数注入向类本身添加范围注释

      @PerActivity class MyActivityOtherDataRepo {
          @Inject
          MyActivityOtherDataRepo() { /*...*/}
      }
      

    @PerActivity 以及任何子组件将能够提供任何东西 @过活性 范围。

    你的类(公共/包私有)的可见性不会直接影响这个范围,但当然你将无法在应用程序的其他部分导入该类。