每个HTTP请求的单个实例类

时间:2011-11-23 13:46:18

标签: c# asp.net session httpwebrequest singleton

为了调试我的ASP.NET应用程序,我创建了一个名为MessageHandling.cs的类。此时它是单例模式,但我希望它是每个请求的实例。

我的mssqlDb课会在MessagesHandling课程中填写以下消息:'Db connected','数据已插入'以及类似的内容。在处理apsx页面的所有事件后,MessageHandling类将在事件createFile.apsx.cs中由Page_LoadComplete()读取。所有错误和消息都将显示给用户。

此时系统正在进行调试。此时的问题是在发送请求后MessageHandling没有被清空,并且错误也在第二个浏览器上显示而没有做任何事情。我还希望能够使用此系统向最终用户显示消息,例如:“Blog created”。

我的问题基本如下:
Class A创建Class B
Class C读取Class B

单例不起作用,因为它不是每个用户/会话/请求。所以我需要另一种方法。

3 个答案:

答案 0 :(得分:17)

将其存储在HttpContext.Items中,就像每个请求一样。

HttpContext.Items - a Per-Request Cache Store

答案 1 :(得分:4)

HttpContext.Current是当前请求的HttpContext对象。它的Items属性为IDictionaryobjectobject。你可以把任何你喜欢的东西放在那里,它将与当前的请求挂钩。

答案 2 :(得分:-1)

您是否可以检查单例的构造函数以查看该对象是否存在于会话中?如果没有,创建它然后返回它?

private Singleton()
{
    // do whatever
}

public Singleton GetMySingleton()
{
    if(HttpContext.Current.Items["MyCustomSingleton"] == null)
        HttpContext.Current.Items["MyCustomSingleton"] = new Singleton();
    //

    return (Singleton)HttpContext.Current.Items["MyCustomSingleton"];
}