Лучший источник на C # Singletons (также охватывает Lazy<>
) принадлежит Джону Скиту: http://csharpindepth.com/Articles/General/Singleton.aspx
Предположим, вы хотите иметь класс, который:
- представляетуникальный ресурс, поэтому он должен иметь уникальный экземпляр,
- экземпляр требует дорогой инициализации,
- параметры инициализации будут доступны только во время выполнения,
- тамэто случаи, когда вы не будете использовать объект в конце концов,
- существует более одного потока, который может попытаться инициализировать одноэлементный объект одновременно,
- и т. д.
Если большинство вышеперечисленных условий выполняются, вам нужно убедиться, что классом является Singleton, а уникальный экземпляр лениво инициализируется (не инициализируется до тех пор, пока не понадобится). Если вы ориентируетесь на C # 4.0 или более позднюю версию, использование Lazy<>
упрощает ваш дизайн, более читаемый и легче запомнить.