I have an object cache which implements the Singleton design pattern. My approach to singleton was always to lazy load the static instance when the property is first accessed. <
Jon Skeet has a nice article on singletons discussing this issue.
Rather than rolling your own threadsafe lazy initializer and possibly getting it wrong, I recommend reading the msdn on Lazy<T>
.
https://docs.microsoft.com/en-us/dotnet/framework/performance/lazy-initialization#thread-safe-initialization