Generic singleton pattern in C#