Singletonパターン

定石としては、

using System;

public sealed class Singleton {
    static readonly Singleton instance = new Singleton ();

    Singleton () { Console.WriteLine ("Constructor."); }

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

class Program {
    static void Main () {
        Console.WriteLine ("Main.");
        object o = Singleton.Instance;
    }
}

/*
Constructor.
Main.
 */

であり、スレッドセーフ&インスタンス化の遅延・・・のはずですが、Singleton.Instanceへのアクセス前にコンストラクタが呼ばれてしまいます。ildasmでアセンブリを覗いてみると、beforefieldinitがマークされており、これが原因っぽいです。んではと、

using System;

public sealed class Singleton {
    static readonly Singleton instance = new Singleton ();

    // beforefieldinitを付けさせない
    static Singleton () {}

    Singleton () { Console.WriteLine ("Constructor."); }

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

class Program {
    static void Main () {
        Console.WriteLine ("Main.");
        object o = Singleton.Instance;
    }
}

/*
Main.
Constructor.
 */

静的コンストラクタを書くとbeforefieldinitが付かないので望み通りの動作になります。