我有一个接口BaseProcessor
及其一些实现。
现在,在一个类(ValidationComponent
)中,我想要列出所有BaseProcessor实现的列表,例如:List<BaseProcessor> processors;
所有实现都有一个@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);
}
为了将实现传递到构造函数中,dagger正在创建这些实现的实例,因为如上所述,它们都具有@Inject
构造函数。
现在,我可以以某种方式使用Dagger为我创建所有这些实现实例,而不是在构造函数中传递每个具体的实现?
[我知道在Spring框架中通过用@Component
spring注释对实现进行注释是可能的。匕首有办法吗?
您可以使用multibindings完成此操作,特别是通过在抽象模块中添加@IntoSet
绑定。
@IntoSet
这将使@Module
abstract class ProcessorBindingModule {
@Binds
@IntoSet
abstract BaseProcessor bindProcessor1(ProcessorImpl1 processor);
// ...
}
可以注入:
Set<BaseProcessor>