gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:44:53 25 4
gpt4 key购买 nike

我试图在我的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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com