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

时间:2017-11-10 22:12:10

标签: android dagger-2 dagger

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

我理解如何为Module中声明的依赖项指定范围:

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

但是如何通过构造函数注入(如下所示)指定添加到依赖关系图的类的范围?

class MyActivityOtherDataRepo {

    @Inject
    MyActivityOtherDataRepo() {
    } 
} 

有没有什么方法可以为MyActivity创建此类活动范围?

或者,只要它通过会员注入注入MyActivity,就会有效地活动吗?如果是这样,是否有办法将范围限制为MyActivity?我能想到的就是将MyActivityOtherDataRepo个包私有,并将其放在与MyActivity相同的包中。

1 个答案:

答案 0 :(得分:1)

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

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

    @Provides
    @PerActivity
    MyActivityDataRepo provideMyActivityDataRepo() { /*...*/}
    
  • 或使用构造函数注入将范围注释添加到类本身

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

它将由此范围确定范围,因此@PerActivity中的任何组件以及任何子组件都可以提供@PerActivity范围内的任何内容。

您的类(public / package private)的可见性不会直接影响此范围,但您当然无法在应用的其他部分导入该类。