Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET MVC中创建全局对象的最佳位置_Asp.net_Asp.net Mvc 3 - Fatal编程技术网

在ASP.NET MVC中创建全局对象的最佳位置

在ASP.NET MVC中创建全局对象的最佳位置,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,我想在我的ASP.NET MVC应用程序中实现对象。ConcurrentQueue对象将在会话之间共享,并且应该创建一次。在ASP.NET MVC中创建ConcurrentQueue的最佳位置是什么 文件Global.asax.cs,受保护的无效应用程序\u Start()方法重载 另一种方法是创建单例/静态类。您可以: 在静态构造函数中创建它,因此它仅在某些代码实际使用该类型时创建 Global.asax 使用WebActivator-您不会污染Global.asax文件,您可以在不同的程序集

我想在我的ASP.NET MVC应用程序中实现对象。ConcurrentQueue对象将在会话之间共享,并且应该创建一次。在ASP.NET MVC中创建ConcurrentQueue的最佳位置是什么

文件
Global.asax.cs
受保护的无效应用程序\u Start()
方法重载

另一种方法是创建单例/静态类。

您可以:

  • 在静态构造函数中创建它,因此它仅在某些代码实际使用该类型时创建
  • Global.asax
  • 使用WebActivator-您不会污染Global.asax文件,您可以在不同的程序集中创建队列

  • 您选择的任何类都可以包含它的一个实例,但是最好将它耦合到一个类中,该类负责队列用于的任何功能

    例如,缓存类:

    public class MyCache
    {
         public static ConcurrentQueue Queue { get; private set; }
    
         static MyCache()
         {
              Queue = new ConcurrentQueue();
         }
    }
    

    这将在第一次使用MyCache类时初始化它。如果您想要更细粒度的控制,您可以创建一个
    Initialize
    方法,您的Global.asax.cs文件在应用程序启动时调用该方法。

    我应该在哪里声明一个ConcurrentQueue变量,以便稍后从code?For
    Global.asax.cs
    方法-直接在Global.asax.cs中访问它,例如,在应用程序_startdo
    公共静态ConcurrentQueue队列{get;private set;}
    上方的一行,并在应用程序_start中初始化它。有关单例静态类,请参见@ChrisS-answer