Guice's AssistedInject nasıl kullanılır?


Yanıtlar:


171

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

AssistedInjectFactorykendi başınıza kodlamak yerine sınıf için dinamik olarak yapılandırmanıza izin verir . Bu genellikle, enjekte edilmesi gereken bağımlılıkları olan bir nesneye ve nesnenin yaratılması sırasında belirtilmesi gereken bazı parametrelere sahip olduğunuzda yararlıdır.

Belgelerden örnek bir RealPayment

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

Bunu gör CreditServiceveAuthService kapsayıcı tarafından enjekte edilmelidir, ancak başlangıçTarihi ve miktar, örnek oluşturma sırasında bir geliştirici tarafından belirtilmelidir.

Dolayısıyla, a enjekte etmek yerine, içinde olarak işaretlenmiş parametrelerle Paymenta enjekte edersiniz .PaymentFactory@AssistedRealPayment

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

Ve bir fabrika bağlanmalı

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

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

@Inject
PaymentFactory paymentFactory;

ve kodunuzda kullanıldı

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

8
Çok aradım ve şüphelerime daha kısa ve net bir açıklama bulamadım. Çok teşekkürler
Gabber

18
Bunu anlamak Github'daki belgelerden daha kolaydır. Aferin.
arjabbar

8
Github dokümantasyonu buna kıyasla saçma.
EMM

2
'Ödeme' yöntem çağrısında 'tarih' ve 'tutar' iletilmemeli mi? Neden kurucuya buraya enjekte edilmeleri gerekir?
Harshit

2
Merak edenler RealPaymentiçin bir arayüz uygulamaya gerek yoktur.
jsallaberry
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.