2010-02-23 5 views
3

Comment créer une bibliothèque de classes où je peux obtenir et définir comme l'objet IIS Session où j'utilise var x = objectname("key") pour obtenir la valeur ou objectname("key") = x pour définir la valeur?Comment créer un wrapper d'objet session C#?

+0

voulez-vous que votre objet de parler à IIS ou que vous venez de faire une comparaison analogue? –

+0

Quelle est votre question, spécifiquement? Comment ajouter '[xxx]' support à votre objet? ou comment rendre un objet disponible partout? ou ... ? –

+0

En fait, je voulais écrire un remplacement pour la session IIS afin que je puisse enregistrer l'état de la session pour une ferme Web. Je voulais l'écrire de telle sorte que je n'aurais pas à changer tous les endroits où la session est actuellement définie ou utilisée. – Mike

Répondre

9

Normalement j'ai juste une classe statique qui enveloppe mes données de session et rend SÛR type comme:

public static class MySessionHelper 
{ 
    public static string CustomItem1 
    { 
     get { return HttpContext.Current.Session["CustomItem1"] as string; } 
     set { HttpContext.Current.Session["CustomItem1"] = value; } 
    } 

    public static int CustomItem2 
    { 
     get { return (int)(HttpContext.Current.Session["CustomItem2"]); } 
     set { HttpContext.Current.Session["CustomItem2"] = value; } 
    } 

    // etc... 
} 

Puis, quand je dois obtenir ou de définir un élément que vous souhaitez simplement faire ce qui suit:

// Set 
MySessionHelper.CustomItem1 = "Hello"; 

// Get 
string test = MySessionHelper.CustomItem1; 

Est-ce ce que vous cherchiez?

EDIT: Selon mon commentaire sur votre question, vous ne devriez pas accéder à la session directement à partir des pages de votre application. Une classe wrapper rendra non seulement le type d'accès sécurisé, mais vous donnera également un point central pour effectuer tous les changements. Avec votre application utilisant le wrapper, vous pouvez facilement échanger Session pour une banque de données de votre choix à tout moment sans apporter de modifications à chaque page qui utilise la session.

Une autre chose que j'aime dans l'utilisation d'une classe wrapper est qu'elle documente toutes les données stockées dans la session. Le programmeur suivant peut voir tout ce qui est stocké dans la session juste en regardant la classe wrapper afin que vous ayez moins de chance de stocker les mêmes données plusieurs fois ou de récupérer des données qui sont déjà mises en cache dans la session.

+0

Comme la classe statique mieux. Cela rend l'accès plus facile. –

+0

Merci. c'est très utile. – Mike

+0

La classe statique est très bonne. –

5

Je suppose que vous pourriez utiliser un dictionnaire générique comme Dictionary<string, Object> ou quelque chose de similaire pour obtenir cet effet. Vous devez écrire du code wrapper pour ajouter un objet lors de l'accès à un élément inexistant, par exemple une propriété par défaut personnalisée dans votre Wrapper.

2

Vous pouvez utiliser quelque chose comme ça

public class Session 
{ 
    private static Dictionary<string, object> _instance = new Dictionary<string, object>(); 
    private Session() 
    {    
    } 

    public static Dictionary<string, object> Instance 
    { 
     get 
     { 
      if(_instance == null) 
      { 
       _instance = new Dictionary<string, object>(); 
      } 
      return _instance; 
     } 
    } 
} 

Et l'utiliser comme ceci

Session.Instance["key"] = "Hello World"; 
+1

Je m'excuse de commenter une vieille réponse, mais puisque ce dictionnaire est dans un objet statique, est-il possible qu'il soit partagé avec d'autres utilisateurs d'une application web? Dites, si cet objet contenait le nom d'utilisateur, par exemple, serait-ce un problème? – Dave