//--------------------------------------------------------------------
        public static CSynchroniseurBaseDistante GetSynchroniseur(int nIdSession)
        {
            CSynchroniseurBaseDistante synchro = null;

            if (!m_dicSessionToSynchroniseur.TryGetValue(nIdSession, out synchro))
            {
                synchro = new CSynchroniseurBaseDistante(nIdSession);
                m_dicSessionToSynchroniseur[nIdSession] = synchro;
            }
            return(synchro);
        }
        //----------------------------------------------------------------------
        /// <summary>
        /// Intègre les opérations d'un synchroniseur
        /// </summary>
        /// <param name="synchroniseur"></param>
        /// <returns></returns>
        internal CResultAErreur IntegreOperations(CSynchroniseurBaseDistante synchroniseur)
        {
            CResultAErreur result = CResultAErreur.True;

            foreach (KeyValuePair <string, CDonneesSynchronisationBaseDistante> kv in synchroniseur.m_dicDonneesSynchro)
            {
                CDonneesSynchronisationBaseDistante donneeDeMoi = null;
                if (!m_dicDonneesSynchro.TryGetValue(kv.Key, out donneeDeMoi))
                {
                    donneeDeMoi = new CDonneesSynchronisationBaseDistante(kv.Value.CleDestination);
                    m_dicDonneesSynchro[kv.Key] = donneeDeMoi;
                }
                result = donneeDeMoi.IntegreOperations(kv.Value);
                if (!result)
                {
                    return(result);
                }
            }
            return(result);
        }
 //----------------------------------------------
 public CResultAErreur CommitTrans()
 {
     lock (this)
     {
         //Récupère le synchroniseur le plus récent
         CSynchroniseurBaseDistante synchroniseur = m_stackSynchroniseurs.Pop();
         if (m_stackSynchroniseurs.Count > 0)
         {
             //Copie les données du synchroniseur dans le prochain (transactions imbriquées)
             return(m_stackSynchroniseurs.Peek().IntegreOperations(synchroniseur));
         }
         else
         {
             CSynchroniseurBaseDistante synchro = CSynchroniseurBaseDistante.GetSynchroniseur(m_nIdSession);
             CResultAErreur             result  = synchro.IntegreOperations(synchroniseur);
             if (!result)
             {
                 return(result);
             }
             result = synchro.TraiteAll();
             return(result);
         }
     }
 }