在我的项目中使用会话

时间:2012-01-04 21:48:55

标签: asp.net session c#-4.0

我是.NET编程的新手,我正在尝试在我已经搞过的样本中实现会话。所以这里是我迄今为止所做的样本的细节。

我的项目中有各种解决方案。类库,Web应用程序和控制台应用程序。

我创建了一个静态类,它有一堆get / properties,并使用这些属性作为全局变量在我的类库中使用。这些get / set属性具有一组混合的数据结构,如list和dictionaries。

我的网页应用只有一个页面,其中包含一堆列表框和按钮。我正在使用我的类库中的所有get set属性到我的Web应用程序中进行一些数据存储和检索。现在,当在两个不同的浏览器中打开网页时,数据将从一个用户重写到另一个用户,因为我正在使用所有静态变量并将数据存储在这些静态变量中。

我对此的最佳解决方案是使用会话,但我对在项目中使用它们感到有些困惑。在这方面,任何人都可以帮助我。

以下是我的解释的一小部分示例:

类库中的XMLData类具有许多这些get / set属性。

public Dictionary<string, List<string>> Content
{
    get { return _testContent; }
    set { _testContent = value;}
}

现在,如何在我的类库中使用HttpContext会话将这些静态属性移动到会话,以便每个使用我站点的用户都拥有自己的数据集。仅供参考。 Web项目基本上用于调用类库的方法,并在UI的列表框中做一些选择,这些是我测试的输入。

提前致谢。

2 个答案:

答案 0 :(得分:1)

简单的方法是,您可以使用

访问类库中类的当前上下文
HttpContext.Current

它上面有Session

您的应用程序可以采用更复杂的方式进行架构,但我们将从最简单的方式开始:)

详细说明,您的类库可以声明一个能够访问会话

的组件的接口
public interface ISessionStore
{
    object Get(string key);
    void Save(string key, object value);
}

现在,定义ISessionStore

的具体实现
public class HttpContextSessionStore : ISessionStore
{
    public object Get(string key)
    {
        var context = HttpContext.Current;

        if (context == null)
            throw new InvalidOperationException("this class is intended to work only within web applications");

        return context.Session(key);
    }

    public void Save(string key, object value)
    {
        var context = HttpContext.Current;

        if (context == null)
            throw new InvalidOperationException("this class is intended to work only within web applications");

        // note that this will overwrite anything already set
        // against this key in session
        context.Session[key] = value;
    }
}

现在,您可以针对界面ISessionStore进行编程,并在您的应用中使用HttpContextSessionStore

如果您正在使用网络表单,我建议您查看 MVP pattern ,或者查看 MVC framework

答案 1 :(得分:0)

除了上面的Russ Cam的评论之外,您还应该检查类库中方法中的HttpContext.Current!= null。如果你开始编写单元测试,或者在ASP.Net中没有执行任何代码,它肯定会让你陷入困境