views:

90

answers:

1

I have some C# library classes that make use of static variables. I use these library classes both for desktop and web applications. Problem is, as I just discovered, static variables don't go down so well on a web server; the values are shared across all sessions using the web site!

How can I preserve the features of a static variable for use in my desktop apps, while making sure that each session on my web server has its own independent values for these variables - but within the session itself, it still really behaves like a static?

+4  A: 

Static variable values are shared across all threads in an application domain. In an ASP.NET application the recommended way to store data that's related only to the current user is the Session.

If you can modify the code of this shared library I would advise you to extract an interface out of these static variables that will provide a mechanism to store values. This will allow each application to provide its own implementation. For a windows application you could use an implementation that internally uses a static variable. For an ASP.NET application you could use the Session. But in all cases you expose only an interface. This will also have the positive side effect of rendering your code easier to unit test.

Darin Dimitrov
I know. But I want to use these libraries in BOTH web AND desktop. I'm looking for suggestions as to how I can keep my libraries agile enough to work in both environments.
Shaul
I suppose that this library is **not** meant to be used in a multi-threaded environment because the people that wrote it relied on static variables to store user state.
Darin Dimitrov
+1 I like your revised answer :)
Shaul