Ho letto https://github.com/google/guice/wiki/AssistedInject, ma non dice come passare i valori degli argomenti AssistedInject. Come apparirebbe la chiamata injector.getInstance()?Come usare Guice AssistedInject?
risposta
Controllare la classe javadoc FactoryModuleBuilder.
AssistedInject
consente di configurare dinamicamente Factory
per la classe anziché codificarlo da solo. Ciò è spesso utile quando si dispone di un oggetto con dipendenze da iniettare e alcuni parametri che devono essere specificati durante la creazione dell'oggetto.
Esempio da docummentaiton è una RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
Vedere che CreditService
e AuthService
deve essere iniettato dal contenitore ma startDate e la quantità deve essere precisato dai uno sviluppatore durante la creazione dell'istanza.
Così, invece di iniettare un Payment
si sta iniettando un PaymentFactory
con i parametri che sono contrassegnati come @Assisted
in RealPayment
public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
e una fabbrica deve essere rilegata
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
fabbrica configurato può essere iniettato in le tue lezioni
@Inject
PaymentFactory paymentFactory;
e utilizzati nel codice
Payment payment = paymentFactory.create(today, price);
correlate, le risposte qui sotto non coprono i casi in cui egli stesso tipo viene utilizzato più volte. https://stackoverflow.com/questions/23553865/using-assisted-inject-with-multiple-params-of-same-type-named-params – Alex