作者:梦之舞的微薄极_922 | 来源:互联网 | 2023-02-07 12:27
假设我有一个模块,我只想导出一个实例A
.但是,这A
需要在构造函数中传递B
和C
传递实例.所以我们也会在模块中声明它们:
public class SampleModule {
@Provides
@Singleton
A provideA(B b, C c){
return new A(b, c);
}
@Provides
@Singleton
B provideB(){
return new B();
}
@Provides
@Singleton
C provideC(){
return new C();
}
}
这工作,但现在B
并C
也可在代码的其他地方.我希望将它们保密,并强制客户端类只能访问A
.
有没有办法实现这个目标?
1> gk5885..:
实现这一目标最简单的方法是绑定你不希望被提供(在这种情况下,类型B
和C
)与@Qualifier
不可访问.
然后,在B
和C
可能是从模块外部访问,为它们注入你就需要提供一个资格赛,这是不.
@Module
public final class SampleModule {
@Qualifier
@Retention(RUNTIME)
private @interface SampleModuleOnly {}
@Provides
@Singleton
static A provideA(@SampleModuleOnly B b, @SampleModuleOnly C c){
return new A(b, c);
}
@Provides
@SampleModuleOnly
@Singleton
static B provideB(){
return new B();
}
@Provides
@SampleModuleOnly
@Singleton
static C provideC(){
return new C();
}
}