Ho letto https://github.com/google/guice/wiki/AssistedInject , ma non dice come passare i valori degli argomenti AssistedInject. Che aspetto avrebbe la chiamata injector.getInstance ()?
Ho letto https://github.com/google/guice/wiki/AssistedInject , ma non dice come passare i valori degli argomenti AssistedInject. Che aspetto avrebbe la chiamata injector.getInstance ()?
Risposte:
Controlla il javadoc della classe FactoryModuleBuilder .
AssistedInject
ti permette di configurare dinamicamente Factory
per la classe invece di codificarla da solo. Questo è spesso utile quando si dispone di un oggetto che ha delle dipendenze che dovrebbero essere iniettate e alcuni parametri che devono essere specificati durante la creazione dell'oggetto.
Un esempio dalla documentazione è un file RealPayment
public class RealPayment implements Payment {
@Inject
public RealPayment(
CreditService creditService,
AuthService authService,
@Assisted Date startDate,
@Assisted Money amount) {
...
}
}
Vedi quello CreditService
e AuthService
dovrebbe essere iniettato dal contenitore, ma startDate e importo dovrebbero essere specificati da uno sviluppatore durante la creazione dell'istanza.
Quindi, invece di iniettare un, Payment
stai iniettando un PaymentFactory
con parametri contrassegnati come @Assisted
inRealPayment
public interface PaymentFactory {
Payment create(Date startDate, Money amount);
}
E una fabbrica dovrebbe essere vincolata
install(new FactoryModuleBuilder()
.implement(Payment.class, RealPayment.class)
.build(PaymentFactory.class));
La fabbrica configurata può essere iniettata nelle tue classi.
@Inject
PaymentFactory paymentFactory;
e utilizzato nel codice
Payment payment = paymentFactory.create(today, price);
RealPayment
non necessita di implementare un'interfaccia.