silnie wpisane sesje w asp.net
Przepraszam, jeśli to pytanie zostało już zadane.HttpContext.Current.Session["key"]
zwraca obiekt i musielibyśmy go rzutować na ten konkretnyType
zanim moglibyśmy go użyć. Przeglądałem różne implementacje sesji maszynowych
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
i czułem, że musimy dodać więcej kodu (popraw mnie, jeśli się mylę) do menedżera sesji, jeśli chcemy dodać nowyType
obiektu do sesji, jako metoda lub jako oddzielny wrapper. Myślałem, że możemy użyć leków generycznych
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;
}
}
Czy istnieje jakaś nieodłączna korzyść z używania
SessionManager<ClassType>.GetSession("sessionString")
niż używanie
HttpContext.Current.Session["sessionString"] as ClassType
Myślałem też, że byłoby miło mieć coś takiegoSessionManager["sessionString"] = objToStoreInSession
, ale odkrył, że klasa statyczna nie może mieć indeksatora. Czy jest jakiś inny sposób na osiągnięcie tego?
Moją myślą było stworzenie obiektu SessionObject, który przechowujeType
i obiekt, a następnie dodaj ten obiekt do Sesji (za pomocą menedżera sesji) z kluczem. Podczas pobierania, rzucaj wszystkie obiekty naSessionObject
, pobierz typ (powiedz t) i obiekt (powiedz obj) i rzućobj
tak jakt
i zwróć to.
public class SessionObject { public Type type {get;set;} public Object obj{get;set;}<br>}
to również nie zadziałałoby (ponieważ podpis powrotu byłby taki sam, ale typy powrotu będą różne).
Czy istnieje inny elegancki sposób zapisywania / pobierania obiektów w sesji w bardziej bezpieczny sposób