在没有HttpContext的情况下在asp.net中获取ApplicationState

时间:2009-03-23 10:02:18

标签: asp.net multithreading httpcontext httpapplication

我有一个在ApplicationState中存储配置对象的webapp。 此对象包含数据库的连接字符串以及其他内容。

有时我会启动一个异步线程来执行一些较长时间运行的任务,比如发送电子邮件和更新数据库。

但是由于这个线程没有HttpContext,我无法获得配置对象。

我知道这个设计一切都依赖于HttpContext很糟糕,但现在改变太迟了。 看看反射器,我看到HttpContext类只使用静态内部类来获取ApplicationState。还有其他方法可以解决这个问题吗?

.net中的所有内部类都非常烦人。

2 个答案:

答案 0 :(得分:1)

启动它时,只需将您喜欢的内容传递给您的主题。使用ParameterizedThreadStart委托来启动它,而不仅仅是ThreadStart委托。您可以将它传递给HttpContext.Current,或者将您希望线程拥有的信息捆绑在一起并传递它。

答案 1 :(得分:0)

如果确实需要从异步处理程序访问应用程序状态(或类似),则应修改HttpApplication子类(例如Global.asax)以存储应用程序状态实例({{ 1}})this.Application期间的静态属性:

Application_Start

使用DI框架注册此实例会更合适,但如果您有一个可用,则可以避免使用Application State来存储配置。此外,.NET中有一个配置框架可以直接满足这种需求,并提供从任何地方读取配置的能力。