ksh*_*m07 3 java dependency-injection dagger dagger-2
我有一个接口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);
}
Run Code Online (Sandbox Code Playgroud)
为了将实现传递给构造函数,dagger 正在创建这些实现的实例,因为如前所述,它们都有@Inject
构造函数。
现在,不是在构造函数中传递每个具体实现,我可以以某种方式使用 Dagger 为我创建所有这些实现实例吗?
我知道在 Spring 框架中可以通过使用@Component
spring 注释来注释实现。Dagger 中有办法吗?
小智 5
您可以使用multibindings来实现这一点,特别是通过@IntoSet
在抽象模块中添加绑定。
@Module
abstract class ProcessorBindingModule {
@Binds
@IntoSet
abstract BaseProcessor bindProcessor1(ProcessorImpl1 processor);
// ...
}
Run Code Online (Sandbox Code Playgroud)
这使得Set<BaseProcessor>
可用于注射:
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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
486 次 |
最近记录: |