Singletons und ihre Nebeneffekte

Singletons sind leider ein heutzutage viel zu viel genutzter Weg, um einfach überall an die Instanz einer Klasse heranzukommen. Bei der Suche in diversen Suchmaschinen für C#-Implementierungen dieser Konstrukte findet man oft ähnliche Umsetzungen wie diese hier:

public sealed class SomeSingleton
{
    private static SomeSingleton _instance; 

    private SomeSingleton()
    { }

    public static SomeSingleton GetInstance()
    {
        if (_instance == null) 
            _instance = new SomeSingleton();

        return _instance;
    } 
}

Sieht zwar erstmal nicht sonderlich böse aus, aber es gibt da so einige Punkte, in dem diese alles andere als freundlich zum Entwickler sind. Was ist nun, wenn in Zukunft mehr als nur eine Instanz dieser Klasse nötig ist? Wie soll das sauber getestet werden, wenn die Reihenfolge von Tests nicht vorherbestimmt werden kann? Ist es immer Transparent wo diese Klasse verwendet werden kann?  Weiterlesen