1

私は今、ASP.NET について非常に混乱しています。Web ページを取得するたびに、そのページによって参照されるビジネス モデルが作成され、表示がユーザーに送信された後、すべてが再び解体されると私は信じていました。

職場の同僚が、セッション、キャッシュ、アプリケーション、ビューステート、クエリ文字列、または投稿を使用せずに (私が知る限り)、ページ フェッチ間でビジネス レイヤー コードを格納しているように見えるこの単純な Web アプリを見せてくれました。

コードは次のとおりです。

    <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 インスタンスがフレームワークのどこに永続化されているのかわかりません。ページの読み込みの間に存在しないと確信していました。誰かがこれに光を当てることができますか? それは私を夢中にさせています。

4

1 に答える 1

1

そのようなシングルトンはアプリケーション ドメイン (AppDomain) に格納されていると思います。アプリケーションが再起動すると、保存されているすべての情報もリセットされます。

AppDomains の詳細については、http://odetocode.com/articles/305.aspx をご覧ください

于 2011-02-07T19:38:38.043 に答える