5

mam prosty moduł wtrysku:zabaw Framework 2.4 - odlewania pola są zawsze zerowa

public class InjectionModule extends AbstractModule { 

    @Override 
    protected void configure() { 
     bind(SomeModel.class); 
     bind(SomeData.class); 
    } 
} 

jest aktywowany w moim application.conf

play { 
    modules { 
    enabled += "com.example.InjectionModule" 
    } 
} 

W moim kontroler chcę, aby utworzyć nowy model i zrobić tak jak poniżej:

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

handleRequest() właśnie zajmuje się tworzeniem obietnicę i powołanie process() w modelu.

W moim SomeModel klasy I próbować wprowadzić pewne zależności, ale są one zawsze null, co robię jest:

@Inject 
private SomeData data; 

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

ale data zawsze ma wartość null.

Należy pamiętać, że jeśli po prostu używam new SomeData(), to działa.

Aktualizacja

Zmieniłem go użyć konstruktora wtrysku i wszystko działa dobrze, to dlaczego nie moja dziedzina wtrysku działa?

Odpowiedz

4

Przede wszystkim wtryskiwacz tworzy jakiś obiekt i dopiero po tym wstrzyknięciu wartości do obiektu. Tak więc właściwości wstrzykiwane będą zawsze miały wartość NULL w konstruktorze.

Udajesz się we właściwy sposób, aby użyć zastrzyku konstruktora, jeśli chcesz mieć wstrzyknięte wartości w konstruktorze.

Najlepszym sposobem byłoby nie używanie konstruktora, używanie wtrysku na właściwościach i użycie metody "build" (ta metoda nie może być wywołana z konstruktora). Możesz uzyskać dostęp do wprowadzonych zmiennych w dowolnej metodzie, ale w konstruktorze.

Powiązane problemy