[Mono-list] Embedded API: static constructor calling

jonathan at mugginsoft.com jonathan at mugginsoft.com
Tue Oct 1 09:37:15 UTC 2013


Is it the case that calling a static field via the embedded API does not cause the static constructor to be run?
This seems to be the behaviour I am observing.

In the example below setting the static MetaDataXXX fields (before any other static access) does not cause the static constructor to be run and expected behaviour is lost.
If I call a static warmup method first, which does trigger the constructor, then all is well.

According to the example at the bottom of this page accessing a public static field should kick off the static constructor.
http://msdn.microsoft.com/en-us/library/aa645612(v=vs.71).aspx

The issue has some complexities though: http://csharpindepth.com/Articles/General/BeforeFieldInit.aspx

public partial class Entities {
        public static string MetaDataProvider = null; 
        public static string MetaDataFormat = null;

        // Static constructor
        static Entities()
        {
            MetaDataProvider = "System.Data.SQLite"; 
            MetaDataFormat = string.Format(@"metadata=res://{0}/BrightPay.csdl|res://{0}/BrightPay.ssdl|res://{0}/BrightPay.msl;provider={1}", Assembly.GetAssembly(typeof(Entities)).FullName, Entities.MetaDataProvider);

            Console.WriteLine ("Entities static ctor. MetaDataFormat = {0}", MetaDataFormat);
        }
}

Jonathan













More information about the Mono-list mailing list