Обратите внимание на следующий сценарий:
- Я создал полнофункциональное веб-приложение с использованием платформы ASP .NET MVC 3.Теперь моим приложением управляет веб-сервер.
- На стороне сервера моего приложения получен HTTP-запрос.
- Класс, реализующий шаблон проектирования Singleton, создается на стороне сервера.
- Ответ отправляется в браузер.
- На стороне сервера моего приложения получен еще один HTTP-запрос.Доступен ли одноэлементный экземпляр, используемый на шаге 2, на стороне сервера?
На этой странице приведена информация о жизненном цикле приложения ASP .NET: http://msdn.microsoft.com/en-us/library/ms178473.aspx
Но я все еще не могу ответить на мой вопрос.
Заранее благодарен за вашу помощь в будущем
Я только что провел несколько тестов под VS2010.
Здесьсписок основных компонентов моего проекта:
- Контроллер Home, содержащий метод действия Index HttpGet.
- Представление, полученное из метода действия Index.
- Класс SingletonTest, который реализует шаблон проектирования Singleton.
Вот код класса SingletonTest:
public class SingletonTest
{
private int counter;
private static SingletonTest instance = null;
public int Counter
{
get
{
return counter;
}
}
public static SingletonTest Instance
{
get
{
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
private SingletonTest()
{
counter = 0;
}
public void IncrementCounter()
{
counter++;
}
}
Вот код метода действия Index:
public ActionResult Index()
{
SingletonTest st = SingletonTest.Instance;
st.IncrementCounter();
return View();
}
Вот код вида:
@SingletonTest.Instance.Counter
Вот сценарий тестирования, который я соблюдал:
- Сервер IIS был автоматически запущен VS2010.
- Я запросилe / Home / Index / URL, после чего отображается значение 1.
- Я запросил / Home / Index / URL, после чего отображается значение 2.
- ...
Этот тест показывает, что экземпляр SingletonTest, созданный на шаге 1, доступен при обработке следующих запросов.Я предполагаю, что для моего веб-приложения на сервере выделено пространство памяти.
Затем я остановил сервер IIS и снова повторил свой тестовый сценарий.Я получил те же результаты, что и раньше: 1, 2, ....