Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Web项目外部的HttpApplication状态(类库)_Asp.net_Httpapplicationstate - Fatal编程技术网

Asp.net Web项目外部的HttpApplication状态(类库)

Asp.net Web项目外部的HttpApplication状态(类库),asp.net,httpapplicationstate,Asp.net,Httpapplicationstate,我有一个ASP.net web应用程序,它的业务逻辑依赖于一个单独的DLL类库项目。但是,我想在DLL项目中使用全局HttpApplicationState。但这似乎是一个特定于web项目的实现 当然,我可以让特定类的构造函数(或方法)将HttpApplicationState作为参数,但我想知道是否有更有效的方法来实现这一点。我意识到我正在创建一些设计问题,但我真的希望能够在我的业务逻辑中使用全局内容。使用HttpContext.Current.Application您应该能够在外部类中访问H

我有一个ASP.net web应用程序,它的业务逻辑依赖于一个单独的DLL类库项目。但是,我想在DLL项目中使用全局HttpApplicationState。但这似乎是一个特定于web项目的实现


当然,我可以让特定类的构造函数(或方法)将HttpApplicationState作为参数,但我想知道是否有更有效的方法来实现这一点。我意识到我正在创建一些设计问题,但我真的希望能够在我的业务逻辑中使用全局内容。

使用
HttpContext.Current.Application
您应该能够在外部类中访问HttpApplicationState

更新


但是我同意John Saunders的观点-业务逻辑不应该知道从何处调用它。

使用
HttpContext.Current.Application
您应该能够在外部类中访问HttpApplicationState

更新


但是我同意John Saunders的观点-业务逻辑不应该知道从何处调用它。

您应该尝试将web应用程序和类库之间的关注点分开。类库应该尽可能少地了解web应用程序正在调用它们这一事实。特别是,它们不应该使用会话状态或应用程序状态。事实上,它们最好不要引用System.Web.dll

让web应用程序将类库需要的应用程序状态片段传递给类库。类库应该不知道数据来自应用程序状态这一事实


这也使得对类库进行单元测试变得更加容易,因为可以从单元测试框架中调用它。

您应该尝试将web应用程序和类库之间的关注点分开。类库应该尽可能少地了解web应用程序正在调用它们这一事实。特别是,它们不应该使用会话状态或应用程序状态。事实上,它们最好不要引用System.Web.dll

让web应用程序将类库需要的应用程序状态片段传递给类库。类库应该不知道数据来自应用程序状态这一事实


这也将使对类库进行单元测试变得更加容易,因为可以从单元测试框架调用它。

我正在寻找实现一个对象池模式,并且确实希望依靠应用程序状态来实现它的一些机械化……我希望保持和重用页面之间的数据库连接。目前,我的业务逻辑对象初始化数据库连接,当客户机从一页转到另一页时,这些连接被重新初始化,这会产生一些问题。因此,理想情况下,我希望我的BLL能够使用某种类型的池来防止GC删除这些连接。有没有其他模式可以用来实现这一点?问题不在于模式,而在于持久性存储。为什么不直接使用
静态
数据(适当锁定)来存储对象呢。此外,大多数数据库客户机都有连接池,所以您甚至不需要自己做。我正在寻找实现一个对象池模式,并真的希望依靠应用程序状态实现它的一些机械化…我想保持和重用页面之间的数据库连接。目前,我的业务逻辑对象初始化数据库连接,当客户机从一页转到另一页时,这些连接被重新初始化,这会产生一些问题。因此,理想情况下,我希望我的BLL能够使用某种类型的池来防止GC删除这些连接。有没有其他模式可以用来实现这一点?问题不在于模式,而在于持久性存储。为什么不直接使用
静态
数据(适当锁定)来存储对象呢。而且,大多数数据库客户机都有连接池,所以您甚至不需要自己进行连接池。