Question

Je suis un peu perdu avec l'utilisation d'Inject on variable.

J'ai fait fonctionner ce code:

private XXServiceAsync xxServiceAsync;

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

    this.xxServiceAsync = xxServiceAsync;
    initializeWidgets();
}

Avec ce code, je peux appeler mon service RPC partout où j'en ai besoin dans la classe (au clic ...) Je voudrais effacer un peu le code en injectant directement dans la variable;ce faisant:

@Inject
private XXServiceAsync xxServiceAsync;


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

Cela garde toujours le service à NULL. Est-ce que je fais quelque chose de mal ?La magie du GIN avec les services RPC est-elle censée se faire autrement?

Merci!

Était-ce utile?

La solution

Il est toujours nul à ce stade, car Gin (et Guice, et d'autres frameworks comme celui-ci) ne peuvent pas affecter les champs tant que le constructeur n'a pas fini de fonctionner.

Considérez à quoi cela ressemblerait si vous câbliez manuellement le code (rappelez-vous que Gin / Guice trichera un peu pour attribuer des champs privés, appeler des méthodes non visibles):

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

Si vous avez besoin de quelque chose dans le constructeur, transmettez-le au constructeur.Si vous n'en avez pas besoin tout de suite (par exemple jusqu'à ce que asWidget () soit appelé), alors un champ ou un setter annoté avec @Inject peut être utile.

Autres conseils

Si vous avez une injection au niveau du champ, vous pouvez utiliser une méthode @Inject vide pour effectuer votre initialisation post-injection.La méthode injectée sans argument sera exécutée une fois les injections de champs terminées sur la classe.

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

Edit: J'ai précédemment déclaré qu'il était également exécuté après l'injection de méthode, mais les tests montrent que ce n'est pas toujours le cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top