2 pièce(s) jointe(s)
Singleton / durée de vie d'une instanciation declasse
Bonjour,
J’aimerais gérer les paramètres par défaut de mon appli, j’ai vu que cela était possible en gérant les my.settings, mais j’aimerais le faire avec un fichier dédié
Je rencontre un pb de durée de vie de ma classe Singleton, sûrement du à mon ignorance donc vous remercie par avance de m’aider à corriger mes lacunes
Grâce à l’excellent Tuto de Philippe Lasserre , j’ai crée une classe singleton (voir image 20130225-10)
J’ai crée un Form pour modifier/enregistrer ces paramètres via Serialize/Deserialize
Au démarrage du Form principal, j’instancie cette classe et en charge les valeurs
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Dim PC As ParametreConfig = ParametreConfig.getInstance
Public Sub ChargementParametreConfig()
Call BinaryDeSerialize()
LbLMessage1.Text = "Chargement effectué des paramétres de configuration ! " & PC.Exemple
End Sub
Private Sub BinaryDeSerialize()
Dim Fichier As String = "ParametreConfig.bin"
If Not File.Exists(Fichier) Then
MessageBox.Show("Fichier de configuration non trouvé !" & vbLf & "Veuillez le créer dans le Menu : Utilitaires / Général !")
Exit Sub
End If
Dim Deserializer As New BinaryFormatter
Dim Stream As FileStream = New FileStream(Fichier, FileMode.Open)
PC = CType(Deserializer.Deserialize(Stream), ParametreConfig)
Stream.Close()
End Sub |
Les données sont bien présentes au chargement du Form principal
Je voudrais maintenant utiliser ces paramétres dans d’autres Form, sans avoir à les recharger en les récupérant dans l’instance en cours (Form principal toujours ouvert)
Pour mes essais, j’ai donc essayé à l’ouverture d’un autre Form:
Code:
MessageBox.Show("Parametre chargé : " & ParametreConfig.getInstance.Exemple.ToString)
Mais aussi
Code:
1 2 3
| Dim PC As ParametreConfig = ParametreConfig.getInstance
Pc.Exemple = ParametreConfig.getInstance.Exemple
MessageBox.Show("Parametre chargé : " & PC.Exemple.ToString) |
L’intellisense ne me signale pas d’erreur, mais l’exécution me lève une erreur (voir image 20130225-11). Je ne peux évidemment pas recréer une nouvelle instance par new (Singleton)
Si je recharge (deserialize) la classe dans le Form, alors plus de pb, mais ce n’est pas le but !
Il y a forcément quelque chose que je n’ai pas compris dans la durée de vie de l’instance de ma classe, Singleton ou serialize/deserialize mais je ne vois pas ou !
Par avance merci de vos lumières
Bertrand