Since I create the readonly static instance as soon as someone uses the class, no lazy loading, this code is thread safe and I do not need to follow the Double-checked locking design pattern, correct?
public class BusSingleton<T> where T : IEmpireEndpointConfig, new() { private static readonly BusSingleton<T> instance = new BusSingleton<T>(); private IBus bus; public IBus Bus { get { return this.bus; } } public static BusSingleton<T> Instance { get { return instance; } } private BusSingleton() { T config = new T(); bus = NServiceBus.Bus.Create(config.CreateConfiguration()); ((IStartableBus) bus).Start(); } }