IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 .NET Discussion :

probleme singleton serialisation


Sujet :

.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Par défaut probleme singleton serialisation
    Bonsoir a tous,
    je veux utiliser une classe qui ne peut s'instancier qu'une fois et qui soit thread-safe.
    De plus je veux pouvoir la serialiser dans un fichier et la deserialiser.
    La serialiser ne me pose pas de probleme par contre pour la deserialiser ca me pose probleme.
    voici la definition de ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
        [Serializable()]
        public class BlackList : ISerializable
        {
            //Variables
            public List<BlackListNumber> ListBlackListNumber { get; set; }
            static readonly BlackList instance = new BlackList();
            public static BlackList Instance { get { return instance; } }
            //Constructeurs
            private BlackList() { ListBlackListNumber = new List<BlackListNumber>(); }
            //Methodes
            public static void writeObject(string path,BlackList ObjectToSerialize)
            {
                Stream stream = File.Open(path, FileMode.Create);
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, ObjectToSerialize);
                stream.Close();
            }
            public void writeObject(string path)
            {
                Stream stream = File.Open(path, FileMode.Create);
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, this);
                stream.Close();
            }
            public static BlackList ReadObject(string path)
            {
                Stream stream = File.Open(path, FileMode.Open);
                BinaryFormatter bformatter = new BinaryFormatter();
                BlackList retour;
                retour = (BlackList)bformatter.Deserialize(stream);
                stream.Close();
                return retour;
            }
            public override string ToString()
            {
                string retour = "";
    
                var e = this.ListBlackListNumber.GetEnumerator();
                while (e.MoveNext())
                {
                    retour += e.Current.ToString() + "\n";
                }
                return retour;
            }
    
            //Imlementation interfaces
            #region ISerializable Membres
    
            public void GetObjectData(SerializationInfo info, StreamingContext context)
            {
                info.AddValue("ListBlackListNumber", this.ListBlackListNumber);
                info.AddValue("instance", instance);
            }
    
            #endregion
    
            public BlackList(SerializationInfo info, StreamingContext context)
            {
                this.ListBlackListNumber = (List<BlackListNumber>)info.GetValue("ListBlackListNumber", typeof(List<BlackListNumber>));
                instance = (BlackList)info.GetValue("instance", typeof(BlackList));
            }
        }
    il me dit que :
    Erreur1 Un champ readonly statique ne peut pas être assigné (sauf s'il appartient à un constructeur statique ou un initialiseur de variable) C:\Users\Thomas\Documents\Visual Studio 2008\Projects\BlackListingFunctions\BlackList.cs

  2. #2
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    salut,

    Va falloir que tu modifie les propriété de ton objet, il est readonly static ce qui veux dire que tu ne pourra pas le modifier une fois instancier. Tu peut en revanche recupéré une autre instance de la blacklist de cette maniere :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public BlackList BlackList(SerializationInfo info, StreamingContext context)
    {
                this.ListBlackListNumber = (List<BlackListNumber>)info.GetValue("ListBlackListNumber", typeof(List<BlackListNumber>));
                return (BlackList)info.GetValue("instance", typeof(BlackList));
    }

    Apres c'est a toi de revoir ta conception et de voir ce que tu va en faire.

    Cordialement.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    ou plus simplement enlever le readonly du champ ...

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Par défaut
    Merci pour les infos

    Par contre, sera-t-il toujours thread-safe?

  5. #5
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    Non il ne sera plus Thread safe.


    Mais tu peut implementer un vrai pattern Singleton.

    http://www.yoda.arachsys.com/csharp/singleton.html

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Citation Envoyé par worm83 Voir le message
    Non il ne sera plus Thread safe.


    Mais tu peut implementer un vrai pattern Singleton.

    http://www.yoda.arachsys.com/csharp/singleton.html
    +1
    J'ai souvent fait appel à cet article pour mes implémentations.

    Il aurait peut être thread safe si tu utilisais un constructeur statique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme JAXB serialisation
    Par yassirjanati dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 28/09/2011, 15h59
  2. probleme de serialisation
    Par leame dans le forum MFC
    Réponses: 1
    Dernier message: 18/07/2011, 09h28
  3. Probleme de serialisation d'objet
    Par hannibal.76 dans le forum Langage
    Réponses: 2
    Dernier message: 02/07/2010, 17h27
  4. Linq & webservice : probleme de serialisation
    Par boby62423 dans le forum Linq
    Réponses: 1
    Dernier message: 11/04/2009, 17h32
  5. probleme de serialisation
    Par zulad dans le forum C#
    Réponses: 1
    Dernier message: 30/06/2007, 20h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo