Java 使用Dagger注入接口的所有实现

Java 使用Dagger注入接口的所有实现,java,dependency-injection,dagger-2,dagger,Java,Dependency Injection,Dagger 2,Dagger,我有一个接口BaseProcessor和它的几个实现 现在,在一个类(ValidationComponent)中,我希望有一个所有BaseProcessor实现的列表,如下所示:列出处理器 所有实现都有一个@Inject构造函数 现在,我正在这样做: 在ValidationComponent类中 private List<BaseProcessor> processors; @Inject public ValidationComponent(@NonNul

我有一个接口
BaseProcessor
和它的几个实现

现在,在一个类(
ValidationComponent
)中,我希望有一个所有BaseProcessor实现的列表,如下所示:
列出处理器

所有实现都有一个
@Inject
构造函数

现在,我正在这样做: 在
ValidationComponent
类中

    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);
    }
私有列表处理器;
@注入
公共验证组件(@NonNull final ProcessorImpl1 processor1,
@非空最终处理器MPL2处理器2,
@非空最终处理器MPL3(处理器3){
this.processors=new ArrayList();
this.processors.add(processor1);
this.processors.add(processor2);
this.processors.add(processor3);
}
为了将实现传递到构造函数中,dagger正在创建这些实现的实例,因为如上所述,它们都有
@Inject
构造函数

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


我知道在Spring框架中,通过使用
@Component
Spring注释来注释实现是可能的。Dagger中有什么方法吗?

您可以通过在抽象模块中添加绑定来实现这一点

@Module
abstract class ProcessorBindingModule {

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

    // ...

}
这使得
Set
可用于注射:

    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
    }
私有列表处理器;
@注入
公共验证组件(@NonNull最终集处理器){
this.processors=新的ArrayList(处理器);
//或者只是将字段设置为集合而不是列表
}