ASP.NET MVC HttpContext.Session объект - PullRequest
       3

ASP.NET MVC HttpContext.Session объект

1 голос
/ 18 ноября 2010

У меня есть вопрос.Я создал собственный класс в своем проекте, который содержит публичное статическое свойство ctx и объект HttpContext.Current.Во время выполнения это свойство, по-видимому, ссылается на объект HttpContext, но класс ctx.Session имеет значение null.Когда я отлаживаю свое приложение, левая сторона выражения (ctx) не совсем совпадает с правой стороной (HttpContext.Current).почему это происходит?

Греттингс

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

HttpContext.Current является синглтоном только для этого запроса.Присваивая HttpContext.Current статической переменной, вы делитесь этим HttpContext.Current со всей областью действия, что может быть неверно.

Сеанс - это объект для каждого пользователя, в то время как static - это объект всего приложения.Используйте статически с умом.

0 голосов
/ 05 декабря 2011

То, что я бы сделал, было бы примерно так.

1 - статический класс (например: ContextFactory), который предоставляет текущий httpcontext. Если он имеет 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- Затем я изменяю код UserSess на

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

искренно

...