我想编写一个在ASP.NET和独立应用程序中工作的类库.在ASP.NET下运行时,需要在行为上有一些差异.检查库是否在ASP.NET应用程序中运行的推荐方法是什么?
我可以检查HttpContext.Current,因为它似乎在不在ASP.NET下运行时可靠地返回null.但是,当在ASP.NET中的后台线程上运行时,它也返回null.
任何意见HttpContext.Current或其他解决方案?
补充:感谢关于如何实现关注点分离的所有建议.但是,我想补充一点,这个库不会用于通用目的,所以对于我的特殊情况我不需要很大的灵活性.在我看来,到目前为止最好的(在这个线程中没有提到)是检查 HttpRuntime.AppDomainAppId静态为null,因为它似乎工作正常,即使对于ASP.NET后台线程.但是,这里提供的各种解决方案肯定会对有更多一般需求的其他人有所帮助.
我会将ASP.NET和桌面应用程序共同的所有代码推送到核心库并对其进行测试,然后创建位于核心应用程序之上的库以提供部署细节 - 例如,您的HttpContext调用.然后,您可以在两种情况下都可靠地进行测试,因为您只需要测试一次核心应用程序块.
关于从后台线程检查HttpContext - 这没有意义,并且将始终返回null,因为HttpContext是由asp.net请求处理器定义的.如果您的代码启动后台线程,则新线程中的HttpContext将为null.对于那个很抱歉 :)
作为一种解决方法,您可以尝试将每个新会话添加到全局集合,然后从后台线程调用该集合.您需要注意同步对会话集合的访问权限.
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |