Код ASP.NET Business Layer сохраняется, но я не уверен, где он хранится?
Я по-королевски растерялся из-за ASP.NET. Я полагал, что каждый раз, когда вы извлекаете бизнес-модель веб-страницы, на которую ссылается эта страница, будет создаваться и что после того, как отображение будет отправлено пользователю, все будет снова разрушено.
Коллега на работе показал мне это простое веб-приложение, которое, похоже, хранит код бизнес-уровня между выборками страниц, без использования сеанса, кэша, приложения, viewstate, строк запросов или записей (насколько я могу судить).
Код выглядит следующим образом:
<form id="form1" runat="server" enableviewstate="False">
<div>
<asp:Label ID="Label1" runat="server" Text="Label" EnableViewState="False"></asp:Label>
<asp:Button ID="Button1"
runat="server" Text="Button" EnableViewState="False"
CausesValidation="False" />
</div>
</form>
Загрузка страницы:
PersistanceTest.BLL.Singleton s = PersistanceTest.BLL.Singleton.GetInstance;
Label1.Text = "Counter: " + s.GetCounter;
И синглтон класс:
public class Singleton
{
private int counter;
private Singleton()
{
counter = 0;
}
private static Singleton theSingleton;
static public Singleton GetInstance
{
get
{
if(theSingleton == null)
{
theSingleton = new Singleton();
}
return theSingleton;
}
}
public int GetCounter
{
get
{
int c = counter;
counter++;
return c;
}
}
}
Теперь, когда я загружаю страницу, счетчик увеличивается каждый раз, когда я нажимаю кнопку. Но я понятия не имею, где экземпляр Singleton сохраняется в структуре? Я был уверен, что он не будет существовать между загрузками страниц. Может кто-то пролить свет на это? Это сводит меня с ума.
1 ответ
Я считаю, что синглтоны, подобные этому, хранятся в домене приложений (AppDomain). Когда ваше приложение перезапустится, вся сохраненная информация также будет сброшена.
Вы можете узнать больше о доменах приложений здесь: http://odetocode.com/articles/305.aspx