如何处理同时用于桌面和 Web 的库中的静态变量?
-
19-09-2019 - |
题
我有一些使用静态变量的 C# 库类。我将这些库类用于桌面和 Web 应用程序。问题是,正如我刚刚发现的,静态变量在 Web 服务器上的表现不太好;这些值在使用该网站的所有会话中共享!
如何保留静态变量的功能以在桌面应用程序中使用,同时确保 Web 服务器上的每个会话都有自己独立的这些变量值 - 但在会话本身内,它的行为仍然像静态变量?
解决方案
静态变量值在应用程序域中的所有线程之间共享。在 ASP.NET 应用程序中,存储仅与当前用户相关的数据的推荐方法是 会议.
如果您可以修改此共享库的代码,我建议您从这些静态变量中提取一个接口,该接口将提供一种存储值的机制。这将允许每个应用程序提供自己的实现。对于 Windows 应用程序,您可以使用内部使用静态变量的实现。对于 ASP.NET 应用程序,您可以使用 Session。但在所有情况下,您只公开一个接口。这也会产生积极的副作用,使您的代码更容易进行单元测试。
不隶属于 StackOverflow