Przeczytałem https://github.com/google/guice/wiki/AssistedInject , ale nie mówi, jak przekazać wartości argumentów AssistedInject. Jak wyglądałoby wywołanie injector.getInstance ()?
84
Przeczytałem https://github.com/google/guice/wiki/AssistedInject , ale nie mówi, jak przekazać wartości argumentów AssistedInject. Jak wyglądałoby wywołanie injector.getInstance ()?
Odpowiedzi:
Sprawdź javadoc klasy FactoryModuleBuilder .
AssistedInject
pozwala na dynamiczne konfigurowanieFactory
zajęć zamiast samodzielnego kodowania. Jest to często przydatne, gdy masz obiekt, który ma zależności, które powinny zostać wstrzyknięte i niektóre parametry, które muszą zostać określone podczas tworzenia obiektu.Przykład z dokumentacji to
RealPayment
public class RealPayment implements Payment { @Inject public RealPayment( CreditService creditService, AuthService authService, @Assisted Date startDate, @Assisted Money amount) { ... } }
Zobacz to
CreditService
iAuthService
powinny być wstrzykiwane przez kontener, ale programista powinien określić datę startu i kwotę podczas tworzenia instancji.Więc zamiast wstrzykiwać a
Payment
, wstrzykujesz aPaymentFactory
z parametrami oznaczonymi jako@Assisted
inRealPayment
public interface PaymentFactory { Payment create(Date startDate, Money amount); }
I trzeba związać fabrykę
install(new FactoryModuleBuilder() .implement(Payment.class, RealPayment.class) .build(PaymentFactory.class));
Skonfigurowaną fabrykę można wstrzyknąć do swoich klas.
@Inject PaymentFactory paymentFactory;
i użyte w Twoim kodzie
źródło
RealPayment
nie trzeba implementować interfejsu.