Giả sử tôi là xây dựng một chiếc xe và tôi có một vài hạt cà phê với hiện thực khác nhauDagger2 tùy chỉnh @Qualifier sử dụng
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() {}
}
tại sao CarModule tôi phải xác định @Provides cho các loại phanh cụ thể phanh? Loại chú thích tùy chỉnh @BrakeType có đủ để xác định impl nào được chèn vào không? Hay điều đó đòi hỏi phải sử dụng sự phản chiếu, mà dagger2 không sử dụng?
@Module
public class CarModule {
@Provides @BrakeType("abs")
public Brake absBrake() {
return new AbsBrakeImpl();
}
@Provides @BrakeType("nonabs")
public Brake nonabsBrake() {
return new BrakeImpl();
}
}