Лучшие практики для хранения одноэлементного экземпляра в приложении ASP.NET - PullRequest
6 голосов
/ 30 декабря 2010

Если у нас есть одноэлементный класс, такой как LoadBalancer, и нужен один экземпляр для ASP.NET приложения, то где его хранить?

В настоящее время я использую Application.Add("LoadBalancer", LoadBalancer.Instance) в Application_Start() в Global.asax.

Также Application объект создается ASP.NET, и существует несколько экземпляров для каждого приложения в зависимости от рабочей нагрузки.Также я могу объявить static экземпляр моего LoadBalancer в Global.asax.

Что является предпочтительным?Есть идея получше?

Ответы [ 3 ]

3 голосов
/ 30 декабря 2010

Если это синглтон, почему вы хотите хранить в элементах приложения? Разве он не должен возвращать тот же экземпляр, когда вы используете LoadBalancer.Instance из любого места в приложении?

В случае, если на вашем сайте используется балансировка нагрузки или веб-ферма, у каждого сервера будет свой экземпляр объекта Application и LoadBalancer.Instance.

2 голосов
/ 30 декабря 2010

Вам не нужно хранить одноэлементный объект в объекте Application.Стандартная реализация объекта Singleton остается в силе.http://msdn.microsoft.com/en-us/library/ff650316.aspx

Но если вы используете веб-ферму, это другая история, вы должны разместить объект Singleton отдельно в другой службе, и все серверы должны запрашивать объект у этой службы с помощью Remoting или WCF.1004 *

1 голос
/ 30 декабря 2010

Используйте контейнер МОК, такой как Замок Виндзор.Стиль жизни по умолчанию в замке Виндзор - синглтон.

http://www.castleproject.org/container/documentation/v21/usersguide/lifestyles.html

...