2012-01-23 10 views

Odpowiedz

127

Sprawdź klasę javadoc z FactoryModuleBuilder.

AssistedInject umożliwia dynamiczną konfigurację klasy Factory zamiast samodzielnego kodowania. Jest to często przydatne, gdy masz obiekt, który ma zależności, które powinny zostać wstrzyknięte, oraz pewne parametry, które muszą zostać określone podczas tworzenia obiektu.

przykład z docummentaiton jest RealPayment

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

Zobacz, że CreditService i AuthService powinien być wprowadzony przez pojemnika, lecz startDate i ilość powinna być określona przez programistę w tworzeniu np.

Więc zamiast wstrzykiwania Payment jesteś Wstrzykiwanie PaymentFactory z parametrami, które są oznaczone jako @Assisted w RealPayment

public interface PaymentFactory { 
    Payment create(Date startDate, Money amount); 
} 

A fabryka należy zbindowanych

install(new FactoryModuleBuilder() 
    .implement(Payment.class, RealPayment.class) 
    .build(PaymentFactory.class)); 

skonfigurowanego fabrycznie mogą być wstrzykiwane w Twoje zajęcia.

@Inject 
PaymentFactory paymentFactory; 

i używane w kodzie

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

Wiele potrzebowałem i nie mogłem znaleźć bardziej zwięzłego i jasnego wyjaśnienia wątpienie. Wielkie dzięki – Gabber

+11

Jest to łatwiejsze do zrozumienia niż dokumentacja na Github. Dobra robota. – arjabbar

+5

Dokumentacja Github to bzdura w porównaniu do tego. – EMM