我正在使用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
相同的包中。
答案 0 :(得分:1)
您可以通过以下方式确定元素的范围:
使用范围注释@Provides
或@Binds
带注释的方法
@Provides
@PerActivity
MyActivityDataRepo provideMyActivityDataRepo() { /*...*/}
或使用构造函数注入将范围注释添加到类本身
@PerActivity class MyActivityOtherDataRepo {
@Inject
MyActivityOtherDataRepo() { /*...*/}
}
它将由此范围确定范围,因此@PerActivity
中的任何组件以及任何子组件都可以提供@PerActivity
范围内的任何内容。
您的类(public / package private)的可见性不会直接影响此范围,但您当然无法在应用的其他部分导入该类。