Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# Créer un service XPCOM en JavaScript

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) ?

# Re: Créer un service XPCOM en JavaScript

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);
     }
  }
};

# Re: Créer un service XPCOM en JavaScript

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.