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(处理器);
//或者只是将字段设置为集合而不是列表
}