一種の疑似シングルトン実装を書こうとしています。私はそれがどのように機能するかと同じように機能することを望んでHttpContext
います.
var ctx = HttpContext.Current;
したがって、私の実装は次のようになります。
public class AppUser
{
public string Username { get; set; }
public string[] Roles { get; set; }
public AppUser()
{
var appuser = HttpContext.Session["AppUser"] as AppUser;
if(appuser == null)
throw new Exception("User session has expired");
Username = appuser.Username;
Roles = appuser.Roles;
}
}
public class WebAppContext
{
const string ContextKey = "WebAppContext";
WebAppContext() { } //empty constructor
public static WebAppContext Current
{
get
{
var ctx = HttpContext.Current.Items[ContextKey] as WebAppContext;
if(ctx == null)
{
try
{
ctx = new WebAppContext() { User = new AppUser() };
}
catch
{
//Redirect for login
}
HttpContext.Current.Items.Add(ContextKey, ctx);
}
return ctx;
}
}
public AppUser User { get; set; }
}
そして、このオブジェクトを次のように消費しようとします。
var appuser = WebAppContext.Current.User;
上記の行は、正しい要求コンテキストに関連付けられたユーザーを取得することを保証します。処理中の別の同時 http 要求に関連付けられている他のユーザーではありませんか?