2012-01-23 18 views
70

https://github.com/google/guice/wiki/AssistedInject okudum, ancak AssistedInject argümanlarının değerlerinin nasıl geçeceğini söylemiyor. Injector.getInstance() çağrısı nasıl görünür?Guice'nin AssistedInject'i nasıl kullanılır?

+0

ilgili aşağıdaki cevaplar yine aynı tip birden çok kez kullanıldığı durumları kapsayan değildir. https://stackoverflow.com/questions/23553865/using-assisted-inject-with-multiple-params-of-same-type-named-params – Alex

cevap

127

FactoryModuleBuilder sınıfının javadoc'unu kontrol edin.

AssistedInject, kodlamayı kendi başına kodlamak yerine Factory'u dinamik olarak yapılandırmanıza olanak tanır. Bu genellikle, enjekte edilmesi gereken bağımlılıkları olan bir nesne ve nesne oluştururken belirtilmesi gereken bazı parametreler olduğunda yararlıdır. docummentaiton gelen

Örnek

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

örneği yaratma esnasında bir geliştirici tarafından CreditService ve AuthService kap tarafından enjekte edilmelidir fakat startDate ve miktarı belirtilmesi gerektiği gör RealPayment olup.

Bunun yerine bir Payment sen enjekte edilir enjekte RealPayment

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

içinde @Assisted olarak işaretlenir Ve fabrika

bağlanmış olacaktır parametrelerle bir PaymentFactory
install(new FactoryModuleBuilder() 
    .implement(Payment.class, RealPayment.class) 
    .build(PaymentFactory.class)); 

Yapılandırılmış fabrika enjekte edilebilir sınıfların

@Inject 
PaymentFactory paymentFactory; 

ve kodunuzda kullanılan

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

Çok çalıştım ve daha özlü ve net bir açıklama bulamadım şüpheler. Çok teşekkürler – Gabber

+11

Bu, Github'daki belgelere göre daha kolay anlaşılır. Aferin. – arjabbar

+5

Github dökümantasyonu, buna kıyasla daha fazladır. – EMM