Tôi đang sử dụng Google Guice để tiêm phụ thuộc. Giả sử tôi có như sau:Tiêm phụ thuộc dựa trên điều kiện
public interface Payment {
public void pay();
}
public class PaymentCardImpl implements Payment {
public void pay() {
System.out.println("I pay with a card");
}
}
public class PaymentCashImpl implements Payment {
public void pay() {
System.out.println("I pay cash");
}
}
public class Order {
private Payment payment;
@Inject
public Order(Payment payment){
this.payment=payment;
}
public void finishOrder(){
this.payment.pay();
}
}
Sau ngày từ này, là một module rất đơn giản để ràng buộc, như vậy:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(Payment.class).to(PaymentCashImpl.class);
}
}
Như bạn có thể thấy, một trường hợp Payment
được tiêm vào các nhà xây dựng theo thứ tự . Điều này được thực hiện trong lớp học MyModule
và tổng thể là thực sự mát mẻ.
vẻ chính của tôi như:
public static void main(String[] args) {
MyModule module = new MyModule();
Injector injector = Guice.createInjector(module);
Order order = injector.getInstance(Order.class);
order.finishOrder();
}
Những gì tôi không thể nhìn thấy tuy nhiên, là làm thế nào tôi có thể kết hợp một số cách để có điều kiện ràng buộc hoặc là một PaymentCardImpl
hoặc một trường hợp PaymentCashImpl
để các nhà xây dựng Order
.
Ví dụ: thứ tự là đơn hàng 'trực tuyến'. Sau đó tôi sẽ cần điều này:
bind(Payment.class).to(PaymentCardImpl.class);
Cách tốt nhất để làm điều này là gì? Tôi mới vào tiêm phụ thuộc.
Khi nào bạn biết _which_ thực hiện bạn cần? –