我得到了一个网络应用程序,储存配置的对象ApplicationState.这种对象包含连串的数据库除其他事项。

有时候我开始异步的线做一些不再运行的任务,如发送电子邮件和更新数据库。

然而由于这种线没有HttpContext我不能在配置的对象。

我知道这种设计,一切都取决于HttpContext是坏的,但是那晚改变了。看反射镜我看到HttpContext类只使用一个静态的内部流获得的ApplicationState.是否有任何其他方式得到它?

所有这些内部课程中。净是真的很讨厌。

有帮助吗?

解决方案

只有通过任何你喜欢你的纹的时候你开始。使用 ParameterizedThreadStart 委托开始,而不是只是一个 ThreadStart 代表。你可以通过它HttpContext.目前,或其他捆绑在一起你想要的信息你的线,并通过它。

其他提示

如果您的真正的需要访问应用程序状态(或类似)从异步处理程序,你应该修改你的HttpApplication子类(如Global.asax中)到应用程序状态实例(this.Application)存储到一个静态属性Application_Start期间:

public static HttpApplicationStateWrapper State { get; private set; }

protected void Application_Start()
{
    State = new HttpApplicationStateWrapper(this.Application);
}

这将是更适合使用DI框架注册此情况下,但如果你有一个可用的你很可能避免使用应用程序状态的完全用于存储配置。此外,存在在.NET的结构框架,该框架直接解决了这种需要,并提供了从任何地方读取配置的能力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top