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

问题描述 投票:0回答:1

我有一个接口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注释对实现进行注释是可能的。匕首有办法吗?

java dependency-injection dagger-2 dagger
1个回答
0
投票

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

@IntoSet

这将使@Module abstract class ProcessorBindingModule { @Binds @IntoSet abstract BaseProcessor bindProcessor1(ProcessorImpl1 processor); // ... } 可以注入:

Set<BaseProcessor>
© www.soinside.com 2019 - 2024. All rights reserved.