Envoyé par : thefab
Date : 26/10/2006 06:37
Bonjour,
Est-ce que quelqu'un peut me confirmer la chose suivante:
Dans un composant XPCOM en JavaScript la factory créé l'objet avec createInstance() et c'est Mozilla qui s'occupe de retourner toujours le même objet si il s'agit d'un service:
var module = { factory: { // Même pour un service ! createInstance: function(outer, iid) { ... return (new MonService()).QueryInterface(iid); } } },
Ensuite le service est créé normalement
var service = Components.classes["..."].getService(...IMonService);
Ou bien j'ai tout faux (mais je crois pas car mon service fonctionne) ?
Envoyé par : laurentj
Date : 26/10/2006 16:06
dans les grandes lignes, oui.
En fait, quand tu fais getService, xpcom se charge de gérer un singleton de ton composant : Si il y a déjà eu auparavant un getService sur ce composant, il va renvoyer la même instance. Sinon il instancie ton composant, le stocke dans sa liste pour pouvoir le renvoyer au prochain getService.
en clair : avec getService, tu as toujours le même avec createInstance, tu as toujours une nouvelle copie, une nouvelle instance. Et toi dans ta factory, tu n'a rien à faire, juste à faire comme tu as fait : instancier.
Il y a des cas cependant où l'on voudrait qu'il n'y ait toujours qu'une seule instance de son composant, que l'on fasse un createInstance ou un getService. Dans ce cas, c'est à toi de gérer un singleton dans ta factory. par exemple
var gSingleton = null; var module = { factory: { createInstance: function(outer, iid){ if(gSingleton == null){ gSingleton = new MonService(); } return gSingleton.QueryInterface(iid); } } };
Envoyé par : thefab
Date : 27/10/2006 16:55
Merci pour ces précisions. C'est bien ce qu'il me semblait mais je voulais être sur.
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.