1

一種の疑似シングルトン実装を書こうとしています。私はそれがどのように機能するかと同じように機能することを望んで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 要求に関連付けられている他のユーザーではありませんか?

4

1 に答える 1

1

セッションコンテナからアイテムコンテナにユーザー情報をほとんどコピーする必要がない理由が理解できないという事実は別として、あなたの質問への答えは-はい、セッションデータが正しい場合、同じデータは静的プロパティから利用できるようにします。

私は一度それに関するブログエントリを書きました

http://netpl.blogspot.com/2010/12/container-based-pseudosingletons-in.html

于 2013-08-31T14:54:51.537 に答える