5

ben basit enjeksiyon modülü var null modeli ve böyle bunu:Çal Çerçeve 2.4 Enjekte alanlar hep

public Promise<Result> getPage() { 
    return handleRequest(() -> Play.application().injector().instanceOf(SomeModel.class)); 
} 

handleRequest() sadece sözünü oluşturma ve çağırma ile ilgilenen Modelde process(). Benim SomeModel sınıfta

bazı bağımlılıkları enjekte girişiminde ama ne yapıyorum onlar, hep boş şunlardır:

@Inject 
private SomeData data; 

void process() { 
    // do something 
    // but data is always null 
} 

ama data her zaman sıfırdır.

Sadece new SomeData() kullanıyorsa, işe yaradığını unutmayın.

Güncelleme

Ben yapıcı enjeksiyon kullanımı değiştirdi

ve tüm iyi çalışıyor, neden benim alanım enjeksiyon işe yaramadı?

cevap

4

Her şeyden önce, enjektör bazı nesneler oluşturur ve bu nesneye yalnızca değerleri enjekte ettikten sonra. Enjekte edilen özellikler, kurucuda her zaman boş olacaktır.

Yapıcıya enjekte edilmiş değerler almak istiyorsanız, kurucu enjeksiyonunu kullanmak için doğru yolu kullanacaksınız.

En iyi yol, kurucu kullanmamalı, özelliklerde enjeksiyon kullanmamalı ve "oluşturma" gibi bir yöntem kullanmalıdır (bu yöntem yapıcıdan çağrılmamalıdır). Herhangi bir yöntemde ancak yapıcıda enjekte edilen değişkenlere erişebilirsiniz.