Is static context always single in C#?
I have a library that has a static field inside. I want to create an app and reference this library so I'd have two instances of this static field. .Net runtime does not allow to reference the same library twice, but I wonder is it possible to overcome this limitation?
I'm not allowed to change the library, but I can copy/rename it.
That's not as crazy as you think. In fact, you can achieve this using AppDomains.
Each AppDomain
has its own storage location for static variables. So you can just create a second AppDomain in your process, and communicate between them using an object that inherits from MarshalByRefObject
like in this MSDN example.
While Lucas' suggestion on AppDomains would work, alternatively you could create this effect using generics, as a class with different generic type arguments is treated as a different class, and therefore has its own static fields.
public class SomeClass<T>
{
public static string SomeField;
}
Then:
SomeClass<int>.SomeField = "A";
SomeClass<string>.SomeField = "B";
Console.WriteLine(SomeClass<int>.SomeField); // A
Console.WriteLine(SomeClass<string>.SomeField); // B
For example, the SomeClass<int>
would be set in the library, whereas the SomeClass<string>
would be your copy. Of course this would only work if you could change the library, or the library already used generics.