2012-01-23 15 views

risposta

127

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); 
+6

Ho cercato molto e non ho trovato una spiegazione più concisa e chiara al mio dubbi. Molte grazie – Gabber

+11

Questo è più facile da capire rispetto alla documentazione su Github. Molto bene. – arjabbar

+5

La documentazione di Github è una schifezza rispetto a questa. – EMM