gpt4 book ai didi

java - 使用 Dagger 注入(inject)接口(interface)的所有实现

转载 作者:行者123 更新时间:2023-12-04 02:35:39 24 4
gpt4 key购买 nike

我有一个接口(interface)BaseProcessor以及它的几个实现。

现在,在一个类(ValidationComponent)中,我想要一个我所有 BaseProcessor 实现的列表,如下所示:List<BaseProcessor> processors;
所有的实现都有一个 @Inject构造函数。

现在,目前我正在这样做:
ValidationComponent类(class),

    private List<BaseProcessor> processors;

@Inject
public ValidationComponent(@NonNull final ProcessorImpl1 processor1,
@NonNull final ProcessorImpl2 processor2,
@NonNull final ProcessorImpl3 processor3) {
this.processors = new ArrayList<>();
this.processors.add(processor1);
this.processors.add(processor2);
this.processors.add(processor3);
}

为了将实现传递给构造函数,dagger 正在创建这些实现的实例,因为如前所述,它们都有 @Inject构造函数。

现在,我可以使用 Dagger 为我创建所有这些实现实例,而不是在构造函数中传递每个具体实现吗?

我知道在 Spring 框架中可以通过使用 @Component 注释实现来实现。 Spring 注释。 Dagger有办法吗?

最佳答案

您可以通过 multibindings 完成此操作,特别是通过添加 @IntoSet 在抽象模块中绑定(bind)。

@Module
abstract class ProcessorBindingModule {

@Binds
@IntoSet
abstract BaseProcessor bindProcessor1(ProcessorImpl1 processor);

// ...

}

这使得 Set<BaseProcessor>可注入(inject):
    private List<BaseProcessor> processors;

@Inject
public ValidationComponent(@NonNull final Set<BaseProcessor> processors) {
this.processors = new ArrayList<>(processors);
// or just make the field a Set instead of a List
}

关于java - 使用 Dagger 注入(inject)接口(interface)的所有实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62024665/

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