Dagger 2:避免导出私有依赖项

Mis*_*ith 5 java android dependency-injection dagger dagger-2

假设我有一个模块,我只想导出一个实例A.但是,这A需要在构造函数中传递BC传递实例.所以我们也会在模块中声明它们:

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)

这工作,但现在BC也可在代码的其他地方.我希望将它们保密,并强制客户端类只能访问A.

有没有办法实现这个目标?

gk5*_*885 6

实现这一目标最简单的方法是绑定你不希望被提供(在这种情况下,类型BC)与@Qualifier不可访问.

然后,在BC可能是从模块外部访问,为它们注入你就需要提供一个资格赛,这是不.

@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)