... и теперь для чего-то совершенно другого.
Другая совершенно другая стратегия будет ссылаться на system.web (да, вы можете ссылаться на эту сборку даже в настольном приложении):
using System.Web;
Затем поместите все классы, которые вы хотите «глобально использовать», в Cache:
HttpRuntime.Cache.Insert("Logger", LoggingObject, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);
Наконец, чтобы получить экземпляр вашего глобального объекта, просто извлеките его из Cache:
object LoggingObject = HttpRuntime.Cache.Get("Logger");
БАМ.Мгновенные глобально доступные, одноразовые объекты, шаблон Singleton не требуется.
Конечно, вы также можете немного изменить логику, чтобы попытаться получить Logger, и, если он еще не существует, создайте его дляпервый раз и положить его в кэш для дальнейшего использования.Это зависит только от того, знаете ли вы порядок доступа или нет.