Пожалуйста, рассмотрите следующий сценарий:
- Я создал полнофункциональное веб-приложение, используя платформу 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.
- Я запросил URL-адрес / Home / Index /, тогда было отображено значение 1.
- Я запросил URL-адрес / Home / Index /, тогда было отображено значение 2.
- ...
Этот тест показывает, что экземпляр SingletonTest, созданный на шаге 1, доступен при обработке следующих запросов. Я предполагаю, что моему веб-приложению на сервере выделено место в памяти.
Затем я остановил сервер IIS и снова выполнил свой тестовый сценарий. Получил те же результаты, что и раньше: 1, 2, ....