ASP.NET中的单例

时间:2011-01-07 17:56:48

标签: asp.net caching singleton multi-user

如果我在asp.net中的一个集合周围有一个单独的包装器,它是否必须被缓存,或者它的数据是否会在回发后保留?

此外,如果另一个用户登录应用程序,应用程序是否会创建另一个实例(自身),因此会创建另一个单例实例,还是会访问在第一个实例中创建的同一个单例?

单例的实际实现是以下之一: (设计1:)

using System;

public sealed class Singleton
{
   private static volatile Singleton instance;
   private static object syncRoot = new Object();

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null) 
         {
            lock (syncRoot) 
            {
               if (instance == null) 
                  instance = new Singleton();
            }
         }

         return instance;
      }
   }
}

或设计2:

public sealed class Singleton
{
   private static readonly Singleton instance = new Singleton();

   private Singleton(){}

   public static Singleton Instance
   {
      get 
      {
         return instance; 
      }
   }
}

2 个答案:

答案 0 :(得分:4)

只要应用程序正在运行,就会存在静态变量,直到应用程序重新启动。它将存在于回发和用户之间。

本文介绍如何实现静态单例:http://msdn.microsoft.com/en-us/library/ff650316.aspx

对于你想要做的事情还有更多要求会影响单身人士的实施吗?

答案 1 :(得分:2)

Singleton是一种模式,可确保所有请求只有一个实例。由于您已将其声明为静态,因此它在应用程序的生命周期内存在并且同一个实例将返回给通过您的财产请求该对象的任何用户。