Supponiamo che io sto costruendo una macchina e ho diversi fagioli freno con diverse implementazioniDagger2 personalizzato @Qualifier utilizzo
class Car {
@Inject
Car(@BrakeType(value="abs")Brake frontBrake, @BrakeType(value="nonabs")Brake rearBrake) { }
}
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface BrakeType {
String value();
}
interface Brake {}
@BrakeType(value="abs")
class AbsBrakeImpl implements Brake {
@Inject AbsBrakeImpl() {}
}
@BrakeType(value="nonabs")
class BrakeImpl implements Brake {
@Inject BrakeImpl() {}
}
perché il mio CarModule deve definire @Provides per i tipi di freni specifici? Non dovrebbe essere sufficiente il tipo di annotazione personalizzata @BrakeType per determinare quale impl iniettare? O richiederebbe l'uso della riflessione, che dagger2 non usa?
@Module
public class CarModule {
@Provides @BrakeType("abs")
public Brake absBrake() {
return new AbsBrakeImpl();
}
@Provides @BrakeType("nonabs")
public Brake nonabsBrake() {
return new BrakeImpl();
}
}