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

Dagger 2.13: controlling scope of a constructor-injected class

我正在使用 Dagger Android 2.13,并且正在设置 Activity 范围内的依赖项。

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

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

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

class MyActivityOtherDataRepo {

    @Inject
    MyActivityOtherDataRepo() {
    } 
} 

有什么方法可以让这个 class Activity 适用于 MyActivity 吗?

或者它会在通过成员注入被注入 MyActivity 后立即有效地 Activity 作用域吗?如果是这样,有没有办法将范围限制为 MyActivity ?我能想到的就是将 MyActivityOtherDataRepo 包设为私有并将其与 MyActivity.

放在同一个包中

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

  • 用作用域注释 @Provides@Binds 注释方法

    @Provides
    @PerActivity
    MyActivityDataRepo provideMyActivityDataRepo() { /*...*/}
    
  • 或使用构造函数注入class本身添加作用域注解

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

它将受此范围的限制,因此 @PerActivity 中的任何组件以及任何子组件都将能够提供任何 @PerActivity 范围内的内容。

你的class(public/package private)的可见性不会直接影响这个范围,但是你当然不能在其他部分导入class您的应用程序。