Disculpe si esta pregunta ya se ha hecho. HttpContext.Current.Session["key"]
devuelve un objeto y deberíamos convertirlo a ese particular Type
antes de poder usarlo. Estaba buscando en varias implementaciones de sesiones mecanografiadassesiones fuertemente tipadas en asp.net
http://www.codeproject.com/KB/aspnet/typedsessionstate.aspx http://weblogs.asp.net/cstewart/archive/2008/01/09/strongly-typed-session-in-asp-net.aspx http://geekswithblogs.net/dlussier/archive/2007/12/24/117961.aspx
y sentí que era necesario añadir algo más de código (corríjanme si me he equivocado) a la SessionManager si queríamos añadir una nuevo Type
de objeto en sesión, ya sea como un método o como un contenedor separado. Pensé que podríamos utilizar los genéricos
public static class SessionManager<T> where T:class
{
public void SetSession(string key,object objToStore)
{
HttpContext.Current.Session[key] = objToStore;
}
public T GetSession(string key)
{
return HttpContext.Current.Session[key] as T;
}
}
¿Hay alguna ventaja inherente a usando
SessionManager<ClassType>.GetSession("sessionString")
de utilizar
HttpContext.Current.Session["sessionString"] as ClassType
- También pensaba que sería bueno tener algo como
SessionManager["sessionString"] = objToStoreInSession
, pero encontró que una clase estática no puede tener un indexador. ¿Hay alguna otra forma de lograr esto?
Mi idea era crear un SessionObject que almacenar el
Type
y el objeto, a continuación, añadir a este objeto de sesión (utilizando un SessionManager), con la llave. Al recuperar, eche todos los objetos aSessionObject
, obtenga el tipo (digamos t) y el Objeto (por ejemplo, obj) y marqueobj
comot
y devuélvalo.public class SessionObject { public Type type {get;set;} public Object obj{get;set;}
}
esto no funciona tan bien (como la firma de retorno sería la misma, pero los tipos de retorno será diferente).
¿Hay alguna otra manera elegante de guardar/recuperar objetos en la sesión de una manera más Tipo de manera segura
aunque un buen puesto, que se deriva de su clase a partir de una sesión de clase específica no dejaría que se derivan de su clase a partir de cualquier otra clase abstracta/clase base – ram
@Ram Sí, el punto de la clase en mi publicación es que es un contenedor para los elementos que desea almacenar en sesión. Y como espero que hayas notado, realmente no podría ser más fácil. – TheObjectGuy
¿Realmente funcionará para el estado fuera de proceso? Debido a que el objeto de sesión nunca se escribe en el almacén de sesión, entonces el almacén de sesión aún tendrá los valores anteriores previamente serializados. –