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