Mis*_*ith 5 java android dependency-injection dagger dagger-2
假设我有一个模块,我只想导出一个实例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();
}
}
Run Code Online (Sandbox Code Playgroud)
这工作,但现在B并C也可在代码的其他地方.我希望将它们保密,并强制客户端类只能访问A.
有没有办法实现这个目标?
实现这一目标最简单的方法是绑定你不希望被提供(在这种情况下,类型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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |