2013-07-30 2 views
1

Je suis nouveau à GWT, GWTP.Instancier un PresenterWidget (GWTP) manuellement

J'ai un PresenterWidget qui est instancié plusieurs fois et ajouté à un emplacement. Je veux définir le nombre d'instances par programme. Je sais seulement que je crée une nouvelle instance du widget en l'injectant.

@Inject MyWidgetPresenter first; 
@Inject MyWidgetPresenter second; 
// ... 

Puis-je l'instancier avec new? comment instancier la vue?

J'ai essayé d'utiliser un composite car il semblait être la solution la plus intelligente, car il ne contient pas beaucoup de logique de toute façon. Mais je ne peux pas ajouter un composite à une fente.

Merci à l'avance

+0

J'ai exactement le même problème atm et je ne comprends pas ce que veut GWTP de moi ici ^^ – displayname

Répondre

0

Vous pouvez obtenir la référence ClientGinjector et appeler une méthode getYourPresenter(). Si elle est déclarée @Singleton, elle retournera la même instance, si elle ne crée pas une nouvelle instance, comme si elle utilisait new, mais en injectant tous les paramètres dans le constructeur. Ce sera la même chose que d'ajouter @Inject à un champ.

Ajouté: Si vous n'avez pas le présentateur il nécessaire, à votre ClientGinjector, vous pouvez simplement écrire un getter à cette interface. Ex:

public interface ClientGinjector extends Ginjector { 
    .... 
    SideMenuPresenter getSideMenuPresenter(); 
    .... 
} 
+0

excactly ce que je voulais! Merci beaucoup! – nsrlady

+0

Existe-t-il une façon plus agréable d'obtenir la référence que de la passer au constructeur? MainPresenter public (final EventBus eventBus, vue finale MyView, proxy MyProxy final, PlaceManager placeManager, ClientGinjector ginjector) {...} – nsrlady

+0

Le ClientGinjector est instancié à EntryPoint. Je le garde à une référence statique. Puis à tout moment je peux appeler Injector.get(). Injector est la classe que vous pouvez créer et qui contient une référence au ClientGinjector. –

2

Dans GWTP 1.0, le Ginjector n'est plus nécessaire (généré automatiquement par gwtp).

Dans votre cas (et chaque fois que vous avez besoin plusieurs instances d'une classe), le mieux est d'injecter un fournisseur de votre WidgetPresenter:

@Inject Provider<MyWidgetPresenter> myWidgetPresenterProvider; 

Chaque fois que vous avez besoin d'une nouvelle instance de MyWidegetPresenter, appelez l'obtenir() sur le fournisseur:

MyWidgetPresenter myWidgetPresenter = myWidgetPresenterProvider.get();