ASP.net Stocker des objets RW dans l'application state

ASP.net Stocker des objets RW dans l'application state - C#/.NET managed - Programmation

Marsh Posté le 26-01-2006 à 15:40:17    

Bonjour, j'ai lu q'uen ASP.Net il n'était pas recommandé de stocker des objets dans l'application state (Application["monObjet"]) pour autre chose qu'un acces en lecture seule.  
 
Mon programme est un webservice et j'aimerai qu'il puisse contenir des objets partagés pour toutes ses instances histoire que tous les clients qui s'y connectent ai acces à la meme instance de chacun de ces objets. Comment faire?  
Pour l'instant je stocke ces objets dans l'application state mais c'est pas correct vu que ces objets sont régulièrement modifiés.
Un de ces objet que je voudrait commun à toutes les instances du webservice est un thread, est-ce possible?
 
Est-ce que déclarer ces objets comme "static" suffirait? Dois-je les instancier dans le constructeur du webservice? Si oui j'imagine qu'il faut que je teste si ils sont pas déjà présents pour ne pas ecraser un objet qui existe déjà?
 
Si je ne suis pas assez clair, je peux donner plus de détails...
 
merci

Reply

Marsh Posté le 26-01-2006 à 15:40:17   

Reply

Marsh Posté le 01-02-2006 à 13:45:56    

Si tu veux que tous tes users partagent des instances, static ça convient. (J'espère qu'elles sont thread-safe).
Si tu veux n'en une initialiser qu'au moment où elle sert, et qu'elle soit unique pour tous tes clients, je te conseille un singleton:

Code :
  1. // ton instance
  2. private static object _myinstance = null;
  3. // l'accesseur a ton instance
  4. public static object MyInstance
  5. {
  6.   get
  7.   {
  8.     // si pas encore initialisé
  9.     if(_myinstance == null)
  10.       // alors initialise
  11.       _myinstance = new ....
  12.     return _myinstance;
  13.   }
  14. }

En revanche, j'ai du mal à comprendre pourquoi tous tes clients voudraient avoir accès a un thread...


---------------
Tout est normal, suffit de comprendre pourquoi.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed