我正在使用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
范围。
类(公共/包私有(的可见性不会直接影响此范围,但当然,您将无法在应用的其他部分中导入该类。