Pardonnez-moi si cette question a déjà été posée. http://www.codeproject.com /Kb/aspnet/typedsessionState.aspx
http: // weblogs .asp.net / Cstewart / Archive / 2008/01/09 / Fortement-Tapé-Session-Session-In-ASP-NET.ASPX
http://geekswithblogs.net/dlussier/archive/2007/12/24 /117961.aspx p> Et j'ai senti que nous devions ajouter un autre code (corrigez-moi si j'étais tort) à la sessionManager si nous voulions ajouter un nouveau y a-t-il un avantage inhérent à
en utilisant p>
que d'utiliser p> Ma pensée a été créée un sessionObject qui stockerait le type Cela ne fonctionnerait pas également (car la signature de retour serait identique, mais les types de retour seront différents). P> existe une autre manière élégante de sauver / récupérer des objets en session de manière plus sûre de type p> p> httpcontext.current.session ["clé"] code> renvoie un objet et nous devrions le jeter à ce type
de type code> avant que nous puissions l'utiliser. Je examinais diverses implémentations de sessions typées
type Code> de l'objet dans la session, en tant que méthode ou en tant que wrapper séparé. Je pensais que nous pourrions utiliser des génériques p>
sessionManager
sessionManager ["SessionsRing"] = objtostoreinsession code>,
Mais j'ai constaté qu'une classe statique ne peut pas avoir d'indexeur. Y a-t-il une autre façon d'y parvenir? P>
code> et l'objet, puis ajoutez cet objet à la session (à l'aide d'un sessionManager), avec la clé. Lorsque vous récupérez, jetez tous les objets à
sessionObject code>, obtenez le type (selon T) et l'objet (Say Obj) et lancer
obj code> comme
t code> et renvoyez-le. p>
Session de classe publique
{
type de type public {get; set;}
objet public obj {get; set;}
} code> p> li>
ul>
5 Réponses :
En réalité, si vous cherchiez à taper des objets, placez le type au niveau de la méthode comme:
public class SessionManager { private static SessionManager _instance = null; public static SessionManager Create() { if (_instance != null) return _instance; //Should use a lock when creating the instance //create object for _instance return _instance; } public object this[string key] { get { .. } } }
Pour une manière très propre, maintenable et slick de traiter de la session, regardez ce POST . Vous serez surpris à quel point il peut être simple. P>
Bien qu'un bon post, dériver votre classe d'une classe spécifique à une session ne vous laisserait pas dériver votre classe d'une autre classe de classe abstraite / base
@RAM Oui, le point de la classe dans mon poste est qu'il s'agit d'une enveloppe pour tous les articles que vous souhaitez stocker en session. Et comme j'espère que vous avez remarqué, cela ne pourrait vraiment pas être plus facile.
Est-ce que cela fonctionnera vraiment pour l'état de la procédure? Étant donné que l'objet de session n'est jamais revenu au magasin de session, le magasin de session aura donc toujours les valeurs précédemment sérialisées précédemment.
@TheObjectGuy Le lien de votre réponse semble être mort.
Un inconvénient de la technique est que le code consommateur doit être conscient de quelles clés à utiliser pour le stockage et la récupération. Cela peut être sujet aux erreurs, car la clé doit être exactement correcte, sinon vous risquez de stocker au mauvais endroit ou de récupérer une valeur null. P>
J'utilise réellement la variation dactylographiée forte, car je sais ce que je dois avoir à la session et peut ainsi configurer la classe d'emballage en fonction. J'ai plutôt le code supplémentaire dans la classe de session et ne pas avoir à vous soucier des cordes clés ailleurs. P>
Yup, d'accord avec vous. Je vois que la mise en place de sessionManager.Constants pour les chaînes de session en tant que mise en œuvre standard pour éviter les fautes de frappe
Vous pouvez simplement utiliser un modèle singleton pour votre objet de session. De cette façon, vous pouvez modéliser toute votre session à partir d'un seul objet structure composite. Cet article fait référence à ce dont je parle et discute de l'objet de session comme un objet faiblement dactylographié: http://allthingscs.blogspot.com/2011/03/documing-software-architectural.html P>
J'ai posté une solution sur la question Stackoverflow Est-il une bonne idée de créer une énumération pour les noms de clés des valeurs de session?
Je pense que c'est vraiment slick et contient très peu de code pour y arriver. Il a besoin de .NET 4.5 comme le slickest, mais est toujours possible avec des versions plus anciennes. P>
Il permet: p> fonctionner exactement comme: p>