2009-07-15 4 views
20

У меня есть кэш объектов, который реализует шаблон проектирования Singleton. Мой подход к singleton всегда ленился загружать статический экземпляр, когда свойство сначала получает доступ.Static Constructor & Singleton class

public static Widget 
{ 
    get 
    { 
     if(instance==null) instance = new Widget(); 
     return instance; 
    } 
} 

Однако, я знаю, что этот подход не является поточно и проверка на случай признания ничтожными представляет небольшую неэффективность. Было бы разумно реализовать статический конструктор класса, который создает экземпляр статического экземпляра?

Как я понимаю, статический конструктор будет вызываться всякий раз, когда возникает первый доступ к статическому свойству. Является ли это допустимым, и будет ли он предоставлять какие-либо преимущества в отношении текущего подхода к ленивой загрузке или было бы лучше изучить реализацию прокси-сервера или использовать блокировку, чтобы заставить ее быть потокобезопасной?

public static Widget 
    { 
     get 
     { 
      if(instance==null) 
      { 
       lock(padlock) 
       { 
        if(instance==null) instance = new Widget(); 
       } 
      } 
      return instance; 
     } 
    } 

Я не целый большого опыт статических конструкторов, так что не хочу прыгать в этой идее, если она является равной или хуже реализацией имущества ленивой нагрузки.

Приветствие, Гэри

+1

Я считаю, что это Q & Нить даст вам то, что вы хотите: http://stackoverflow.com/questions/246710/how-to-implement-a-singleton-in-c –

ответ

17

Джон тарелочки имеют хороший article на одиночках, обсуждающих этот вопрос.

+0

Это хорошо работает с Контейнеры IOC тоже: http://www.tavaresstudios.com/Blog/post/Resolving-a-Singleton-Heres-how.aspx –

+0

Ссылка должна быть обновлена ​​до http://csharpindepth.com/Articles/General/Singleton. ASPX – Dorus

Смежные вопросы