Das leider allzu beliebte Singleton Pattern wird meines Erachtens viel zu oft verwendet. Es gibt natürlich einige Szenarien, in denen dieses Pattern nicht nur praktisch, sondern auch sinnvoll sein kann, wie z.B. bei globalen Einstellungen für das Programm.
Allerdings ist eine Klasse, die als Singleton implementiert ist, so gut wie nicht mittels Unittests testbar. Dieses Problem kann man lösen, indem man die Klasse nicht als Singleton implementiert und für die Verwendung der Klasse selbst einen Microkernel verwendet. Der Kernel kümmert sich um die Instanzierung und kann auf Wunsch eine Instanz als Singleton halten.
Eine kleine unvollständige Liste von Microkernel für .net:
Microsoft Unity
Spring.Net
Guru99
Ralf Westphals Microkernel (leicht abgeändert auch seht gut am Compact Framework einsetzbar) mit Artikel