2011-11-23 25 views
9

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

我的mssqlDb类填充MessagesHandling类与消息,如'Db连接','数据插入'和类似的东西。在处理完apsx页面的所有事件后,MessageHandling类别在Page_LoadComplete()事件中被createFile.apsx.cs读取。所有的错误和消息都会显示给用户。

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

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

的单不工作,因为它不是每个用户/会话/请求。所以我需要其他方法。

+0

你在哪里首次实例化你的单身人士? –

+0

mssqlDb是第一个使用它的人。所以这是它启动的地方。 – h3rj4n

回答

4

HttpContext.Current为当前请求的HttpContext对象。它有一个Items财产,这是一个IDictionaryobjectobject。你可以将任何你喜欢的东西放在那里,并且它会被绑定到当前的请求。

-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"]; 
} 
+0

那段代码会在每个会话中缓存,而不是每个请求。 – Bertvan

+0

你,我的坏。没有看到那部分 – Miles

相关问题