C # Patrón Singleton con inicialización activable

Necesito un singleton que:

es perezoso cargadoes hilo seguro carga algunos valores en construcciónlos valores se pueden consultar en cualquier momentola inicialización PUEDE suceder en algún momento preciso, antes de que comience la consulta, por lo que debo poder activarla desde afuera de alguna manera. Por supuesto, disparar varias veces solo debe hacer la inicialización una vez.

Uso .NET 3.5.

He empezado con Jon Skeet'simplementació (Quinta versión) utilizando una subclase estática:

public sealed class Singleton
{
    IEnumerable<string> Values {get; private set;}
    private Singleton()
    {
        Values = new[]{"quick", "brown", "fox"};
    }

    public static Singleton Instance { get { return Nested.instance; } }

    private class Nested
    {
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static Nested()
        {
        }

        internal static readonly Singleton instance = new Singleton();
    }
} 

Esto marca casi todas las casillas, excepto la "inicialización del disparador desde afuera". Dado que la inicialización real ocurre dentro del ctor, no puede suceder más de una vez.

¿Cómo se puede lograr esto

El singleton se usará así:

public static void Main(){

    //do stuff, singleton should not yet be initialized.

    //the time comes to initialize the singleton, e.g. a database connection is available
    //this may be called 0 or more times, possibly on different threads

    Singleton.Initialize();
    Singleton.Initialize();
    Singleton.Initialize();

    //actual call to get retrieved values, should work
    var retrieveVals = Singleton.Instance.Values;

}

Respuestas a la pregunta(6)

Su respuesta a la pregunta