2010-11-18 11 views
1

質問があります。私は、静的なプロパティctxとassingn HttpContext.Currentオブジェクトを含んでいる私のプロジェクトでカスタムクラスを構築しました。実行時に、そのプロパティはHttpContextオブジェクトを参照するようですが、ctx.Sessionクラスはnullです。私のアプリケーションをデバッグするとき、式の左辺(ctx)は右辺(HttpContext.Current)とまったく同じではありません。なぜこれが起こっているのですか?ASP.NET MVC HttpContext.Sessionオブジェクト

Grettings

答えて

1

HttpContext.Currentのみ、その要求のためのシングルトンです。静的変数にHttpContext.Currentを割り当てることによって、このHttpContext.Currentをスコープ全体に共有することになりますが、これは正しくない可能性があります。

セッションはユーザごとのオブジェクトですが、staticはアプリケーションワイドオブジェクトです。静的に静的に使用してください。

-1

私はこのようなものになるでしょう。

1-現在のhttpcontextを提供する静的クラス(例:ContextFactory)。それがHttpContext.Currentを持っているなら、その値を提供します。そうでなければ、それは割り当てられたコンテキストを提供します。あなたのケースでは、new Mock<HttpContextBase>();

public static class ContextFactory 
{ 
    private static HttpContextBase current = null; 

    public static HttpContextBase Current 
    { 
     get { return current ?? HttpContext.Current; } 
     set { current = value; } 
    } 
} 

2 - それから私は心から

+0

=(静的変数に(ユーザーごとに異なる=)セッションを保存しないでください

public static class UserSess { public static UserID { get { return ContextFactory.Current.Session["UserID"]; } set { ContextFactory.Current.Session["UserID"] = value; } } //... } 

にコードUserSessを変更しますすべてのユーザーに同じ)! –

+0

ご覧のとおり、セッションはユーザーが設定しない限り静的なクラスには格納されません(これはテストで行う必要があります)。設定されていない場合は、CURRENT httpコンテキストとCORRECTセッションを返します。 – edokan

+0

申し訳ありませんが、私はそれを逃した –