Domanda

Sono un po 'perso con l'uso dell'iniezione su variabile.

Ho fatto funzionare questo codice:

private XXServiceAsync xxServiceAsync;

@Inject
protected IndexViewImpl(EventBus eventBus, XXServiceAsync tableManagementServiceAsync) {
    super(eventBus, mapper);

    this.xxServiceAsync = xxServiceAsync;
    initializeWidgets();
}

Con questo codice, posso chiamare il mio servizio RPC ovunque ho bisogno nella classe (su clic ...) Vorrei cancellare un po 'il codice iniettando direttamente nella variabile; così facendo :

@Inject
private XXServiceAsync xxServiceAsync;


protected IndexViewImpl(EventBus eventBus) {
    super(eventBus, mapper);
    initializeWidgets();
}

Questo mantiene sempre il servizio nullo. Sto facendo qualcosa di sbagliato ? La magia Gin con i servizi RPC dovrebbe essere fatto diversamente?

Grazie!

È stato utile?

Soluzione

A quel punto è ancora nullo, perché Gin (e Guice e altri framework come questo) non possono assegnare i campi fino a quando il costruttore non ha finito di funzionare.

Considera come sarebbe questo se stavi cablando manualmente il codice (ricorda che Gin/Guice imbroglia un po 'per assegnare campi privati, chiama metodi non visibili):

MyObject obj = new MyObject();//initializeWidgets() runs, too early!
obj.xxServiceAsync = GWT.create(xxService.class);

Se hai bisogno di qualcosa nel costruttore, passalo nel costruttore. Se non ne avrai bisogno subito (come fino a quando non viene chiamato Aswidget ()), allora un campo o un setter annotato con @Inject può essere utile.

Altri suggerimenti

Se si dispone di iniezione a livello di campo è possibile utilizzare un metodo @inject vuoto per eseguire l'inizializzazione post-iniezione. Il metodo iniettato no-arg verrà eseguito dopo che le iniezioni di campo sulla classe sono completate.

@Inject void initialize(){
  ...
  initializeWidgets()
}

EDIT: in precedenza ho affermato che è stato eseguito anche dopo l'iniezione del metodo, ma i test mostrano che non è sempre così.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top