gpt4 book ai didi

java - Dagger 2 : avoid exporting private dependencies

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:29:47 25 4
gpt4 key购买 nike

假设我有一个模块,我只想导出 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();
}
}

这行得通,但现在 BC 也可以在代码的其他地方使用。我想让它们保持私有(private)并强制客户端类只能访问 A

有什么办法可以实现吗?

最佳答案

实现该目标的最简单方法是使用 @Qualifier 绑定(bind)您不希望可用的类型(在本例中为 BC)那是不可访问的。

然后,虽然 BC 可能可以从模块外部访问,但为了注入(inject)它们,您需要提供限定符,但事实并非如此。

@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();
}
}

关于java - Dagger 2 : avoid exporting private dependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43272652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com