Używam Google Guice do wstrzyknięcia zależności. Załóżmy, że mam następujące:Injection Injection na podstawie warunku
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();
}
}
Opierając się na tym, jest bardzo prosty moduł do wiązania, tak jak poniżej:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(Payment.class).to(PaymentCashImpl.class);
}
}
Jak widać, instancja Payment
jest wstrzykiwany do konstruktora zamówienia . Odbywa się to w klasie MyModule
i ogólnie jest naprawdę fajne.
Moje główne wygląda następująco:
public static void main(String[] args) {
MyModule module = new MyModule();
Injector injector = Guice.createInjector(module);
Order order = injector.getInstance(Order.class);
order.finishOrder();
}
Co nie widzę jednak to, w jaki sposób mogę włączyć jakiś sposób warunkowo wiązania albo PaymentCardImpl
lub się PaymentCashImpl
instancji konstruktora Order
.
Załóżmy na przykład, że zamówienie było zamówieniem "online". Wtedy potrzebowałbym tego:
bind(Payment.class).to(PaymentCardImpl.class);
Jaki jest najlepszy sposób na zrobienie tego? Jestem nowy w zastrzyku uzależnienia.
Kiedy wiesz _Który_ realizację potrzeba? –