java - Dagger2 在注入(inject)类中注入(inject)时出错

标签 java android dagger-2 mvp

我试图在我的presenter注入(inject)一个interactor但给了我一个错误,似乎我无法注入(inject)注入(inject)另一个类的类:

error: [Dagger/DuplicateBindings] com.example.calculadora.Data.Interactor.Operacion is bound multiple times:
@Provides com.example.calculadora.Data.Interactor.Operacion com.example.calculadora.Inject.InteractorModule.provideDiv()
@Provides com.example.calculadora.Data.Interactor.Operacion com.example.calculadora.Inject.InteractorModule.provideMult()
@Provides com.example.calculadora.Data.Interactor.Operacion com.example.calculadora.Inject.InteractorModule.provideResta()
@Provides com.example.calculadora.Data.Interactor.Operacion com.example.calculadora.Inject.InteractorModule.provideSuma()
com.example.calculadora.Data.Interactor.Operacion is injected at
com.example.calculadora.Domain.PresenterImpl.operacion
com.example.calculadora.Domain.PresenterImpl is injected at
com.example.calculadora.Inject.InteractorComponent.inject(com.example.calculadora.Domain.PresenterImpl)

这是我的 InteractorModule,它为我提供了 4 个类,具体取决于我要使用的类以及问题所在:

@Module
public class InteractorModule {
    @Provides
    public Operacion provideSuma() {
        return new InteractorSuma();
    }

    @Provides
    public Operacion provideResta() {
        return new InteractorResta();
    }

    @Provides
    public Operacion provideDiv() {
        return new InteractorDivision();
    }

    @Provides
    public Operacion provideMult() {
        return new InteractorMultiplicacion();
    }
}

我想在这里注入(inject)而不是初始化新项目:

@Override
public void setCalculo() {
    Operacion operacion = null;
    String[] operandos = vista.getOperandos();
    Operando operando1 = new Operando(Integer.parseInt(operandos[0]));
    Operando operando2 = new Operando(Integer.parseInt(operandos[1]));


    switch (tipoOperacion) {
        case SUMA:
            operacion = new InteractorSuma(operando1, operando2);
            break;
        case RESTA:
            operacion = new InteractorResta(operando1, operando2);
            break;
        case MULT:
            operacion = new InteractorMultiplicacion(operando1, operando2);
            break;
        case DIV:
            operacion = new InteractorDivision(operando1, operando2);
            break;
    }

    operacion.calcular();
    vista.mostrarResultado(String.valueOf(operacion.getResultado().getValor()));
}

最佳答案

您应该使用 @Named("someName") 注释将彼此分开,或者您可以按照 @Derek 的说明进行操作。我的做法:

@Provides
@Named("someName1")
    public Operacion provideSuma() {
        return new InteractorSuma();
    }

    @Provides
    @Named("someName2")
    public Operacion provideResta() {
        return new InteractorResta();
    }

    @Provides
    @Named("someName3")
    public Operacion provideDiv() {
        return new InteractorDivision();
    }

    @Provides
    @Named("someName4")
    public Operacion provideMult() {
        return new InteractorMultiplicacion();
    }

否则dagger不知道该返回哪一个。

在注入(inject)时也调用@Named

关于java - Dagger2 在注入(inject)类中注入(inject)时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56688817/

相关文章:

Java 关闭 Hook

java - 如何使用 Avro 序列化/反序列化动态 json 类型

java Querydsl BooleanBuilder OneToMany 查询

android - 无法评估模块 'react-native-maps' : Configuration with name 'default' not found

java - 如何从库项目调用主项目中的类/方法?

generics - 注入(inject)由抽象类型参数化的类型化类

android - 使用 multidex 和 Dagger 2 时,Application 对象中缺少函数

java - 转到Java Servlet中的特定目录

android - 在后台使用通知数据

java - 无法在 Android 中使用更新的 Dagger 2.11 API