セッションキーに定数を使用する代わりに、次のような独自のタイプセーフセッションオブジェクトを使用しています(申し訳ありませんが、これはC#です。VBバージョンについては以下を参照してください)。
public class MySession
{
// Private constructor (use MySession.Current to access the current instance).
private MySession() {}
// Gets the current session.
public static MySession Current
{
get
{
MySession session = HttpContext.Current.Session["__MySession__"] as MySession;
if (session == null)
{
session = new MySession();
HttpContext.Current.Session["__MySession__"] = session;
}
return session;
}
}
// My session data goes here:
public string MyString { get; set; };
public bool MyFlag { get; set; };
public int MyNumber { get; set; };
}
セッションとの間で何かを読み書きする必要があるときはいつでも、次のようにタイプセーフセッションオブジェクトを使用できます。
string s = MySession.Current.MyString;
s = "new value";
MySession.Current.MyString = s;
このソリューションには、いくつかの利点があります。
- タイプセーフセッションがあります(タイプキャストはもうありません)
- すべてのセッションベースのデータを文書化できます(MySessionのパブリックプロパティにコメントすることで)
- セッションに新しい要素を追加するときに、同じセッションキーが別の場所ですでに使用されているかどうかを確認するためにソリューションを検索する必要はありません。
更新:
これがVBバージョンです(C#バージョンから自動的に変換されます)。申し訳ありませんが、VBがわからないため、VBでプロパティを作成する方法がわかりませんでした。
Public Class MySession
' Private constructor (use MySession.Current to access the current instance).
Private Sub New()
End Sub
' Gets the current session.
Public Shared ReadOnly Property Current() As MySession
Get
Dim session As MySession = TryCast(HttpContext.Current.Session("__MySession__"), MySession)
If session = Nothing Then
session = New MySession()
HttpContext.Current.Session("__MySession__") = session
End If
Return session
End Get
End Property
' My session data goes here:
Public MyString As String
Public MyFlag As Boolean
Public MyNumber As Integer
End Class