この質問がすでに行われている場合はご容赦ください。オブジェクトを返します。使用する前にHttpContext.Current.Session["key"]
、そのオブジェクトをその特定のオブジェクトにキャストする必要があります。Type
型付きセッションのさまざまな実装を見ていました
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
Type
また、メソッドまたは個別のラッパーとして新しいオブジェクトをセッションに追加する場合は、SessionManagerにコードを追加する必要があると感じました(間違っている場合は修正してください) 。ジェネリックを使用できると思いました
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;
}
}
使用することに固有の利点はありますか
SessionManager<ClassType>.GetSession("sessionString")
使用するより
HttpContext.Current.Session["sessionString"] as ClassType
- 私もこういうものがあればいいなと思っていました
SessionManager["sessionString"] = objToStoreInSession
、しかし、静的クラスはインデクサーを持つことができないことがわかりました。これを達成する他の方法はありますか?
私の考えは、
Type
とオブジェクトを格納するSessionObjectを作成し、このオブジェクトを(SessionManagerを使用して)キーを使用してSessionに追加することでした。取得するときは、すべてのオブジェクトをにキャストしSessionObject
、タイプ(たとえば、t)とオブジェクト(たとえば、obj)を取得し、としてキャストobj
しt
て返します。public class SessionObject { public Type type {get;set;} public Object obj{get;set;}
}
これはうまく機能しません(戻り署名は同じですが、戻りタイプは異なります)。
よりタイプセーフな方法でセッション内のオブジェクトを保存/取得する他のエレガントな方法はありますか?