Domanda Come usare Guice AssistedInject?


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 ()?


74
2018-01-23 17:53


origine


risposte:


Controlla la javadoc di FactoryModuleBuilder classe.

AssistedInject ti permette di configurare dinamicamente Factory per classe invece di programmarlo 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 dalla documentazione è a RealPayment

public class RealPayment implements Payment {
   @Inject
   public RealPayment(
      CreditService creditService,
      AuthService authService,
      @Assisted Date startDate,
      @Assisted Money amount) {
     ...
   }
 }

Guarda quello CreditService e AuthService deve essere iniettato dal contenitore ma startDate e l'importo devono essere specificati da uno sviluppatore durante la creazione dell'istanza.

Quindi, invece di iniettare a Payment stai iniettando a PaymentFactory con parametri contrassegnati come @Assisted in RealPayment

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 usato nel tuo codice

Payment payment = paymentFactory.create(today, price);

132
2018-01-23 21:51