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



我正在使用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

还是在通过成员注入注入MyActivity后立即有效地进行活动范围?如果是这样,有没有办法将范围限制为仅MyActivity?我能想到的就是将MyActivityOtherDataRepo包设为私有并将其放在与MyActivity相同的包中。

您可以按以下条件限定元素的范围:

  • 使用作用域批注@Provides@Binds批注方法

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

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

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

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

最新更新