Dagger2在注入类的类中注入时出错 [英] Dagger2 Error at inject in a class who injects
问题描述
我正在尝试在我的演示者
演示者$ c中<但给了我一个错误,看来我无法在一个注入了另一个类的类中注入它: [Dagger / DuplicateBindings] com.example.calculadora.Data.Interactor.Operacion绑定了多次:
@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在
com.example.calculadora.Domain.PresenterImpl.operacion
com.example.calculadora.Domain.PresenterImpl i中注入.Data.Interactor.Operacion在
com.example.calculadora.Inject.InteractorComponent.inject(com.example.calculadora.Domain.PresenterImpl)中注入s
这是我的 InteractorModule
,它根据我想使用的方式为我提供了4个类,而问题出在哪里:
@Module
公共类InteractorModule {
@Provides
public Operacion ProvideSuma(){
return new InteractorSuma();
}
@Provides
public OperacprovideResta(){
return new InteractorResta();
}
@Provides
public OperacprovideDiv(){
return new InteractorDivision();
}
@Provides
public OperacprovideMult(){
return new InteractorMultiplicacion();
}
}
我想在这里注入而不是初始化新项目:
@Override
public void setCalculo(){
Operacion operationc = null;
String []操作数= vista.getOperandos();
Operandooperndo1 = new Operando(Integer.parseInt(operandos [0]));
Operandooperndo2 = new Operando(Integer.parseInt(operandos [1]));
开关(tipoOperacion){
case SUMA:
操作数=新的InteractorSuma(operando1,operndo2);
休息时间;
case RESTA:
操作=新的InteractorResta(operando1,operndo2);
休息时间;
case MULT:
操作=新的InteractorMultiplicacion(operando1,operndo2);
休息时间;
case DIV:
操作=新的InteractorDivision(operando1,operndo2);
休息时间;
}
operacion.calcular();
vista.mostrarResultado(String.valueOf(operacion.getResultado()。getValor()));
}
您应该将另一个分开带有 @Named( someName)
注释,或者您可以按照@Derek的说明进行操作。我的方法:
@Provides
@Named( someName1)
public Operacion ProvideSuma(){
返回新的InteractorSuma();
}
@Provides
@Named( someName2)
Public Operacion ProvideResta(){
return new InteractorResta();
}
@Provides
@Named( someName3)
public OperacprovideDiv(){
return new InteractorDivision();
}
@Provides
@Named( someName4)
public Operacion ProvideMult(){
return new InteractorMultiplicacion();
}
否则,匕首不知道返回哪一个。
在注入时也调用 @Named
。
I'm trying to inject
in my presenter
an interactor
but gives me an error, at seems I can't inject in a class who injects to another:
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)
This is my InteractorModule
who provides me a 4 classes depending wich I want to use and where seems is the problem:
@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();
}
}
I want to inject here instead of init the new items:
@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()));
}
You should separate one-other with the @Named("someName")
annotation, or you could just do what @Derek says. My approach:
@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();
}
Otherwise dagger doesn't know which one to return where.
Call the @Named
when injecting also.
这篇关于Dagger2在注入类的类中注入时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!