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您的应用程序。
我正在使用 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您的应用程序。