我是.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的列表框中做一些选择,这些是我测试的输入。
提前致谢。
答案 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中没有执行任何代码,它肯定会让你陷入困境