在ASP.NET MVC5中的请求之间不共享Singleton类

时间:2015-02-08 15:10:57

标签: c# asp.net .net asp.net-mvc iis

我有一个Singleton类,它会在每个请求中初始,但我只是在洞应用程序生命中只需要初始化<1次表示只有第一个请求需要初始。:

public class TestUtilitys
    {
        #region Instance
        private TestUtilitys(){
            // Execute in every request
            Log.Debug("Initial");
        }

        private static TestUtilitys_instance;
        public static TestUtilitys Instance
        {
            get
            {
                if (_instance == null)
                    _instance = new TestUtilitys();
                return _instance;
            }
        }

        #endregion Instance

    private string Pro;
    }

然后,当Action在Controller中获取它时,我可以在每个请求中访问它。

public class TestAction(){


   if (null == TestUtilitys.Instance.Pro)
   {
        // execute in every request
        TestUtilitys.Instance.Pro = "test";
    }
}

在我的Web.config中,我只是将这些与我的另一个项目

添加在一起
<!-- cache -->
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <clear />
          <!-- 8 Hour -->
          <add varyByCustom="NavStatic" varyByParam="*" duration="28800" name="NavStatic" location="Server" />
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>

    <compilation targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" />



    <sessionState mode="InProc" timeout="43200" /> 

如您所见,每次Action收到请求时都会执行2位置。我不知道为什么Singlton总是需要在每个请求中重新发布。我不清楚任何缓存或其他东西。我只是为我的项目使用 DevTrends.MvcDonutCaching 。 我在 Windows Server 2012 R2 上使用 IIS8.5 。 .Net版本是: 4.5.1 但是在我的本地计算机上,当我调试时,我的 WIN8.1 (使用 Visual Studio 2013 )就可以了。

更新

在Singleton类方法中,我也发现在上次请求中设置内存缓存后,下一个请求无法从内存缓存中获取内存缓存。它将是 null

// In a method for set Cache
// set in last request
 MemoryCache.Default.Set("key", obj, DateTime.Now);

    ``             ``

// In an another method for get Cache
// get it in next request, but obj will be null
object obj = MemoryCache.Default.Get("key");

我的网站出了什么问题。我该如何修理它?

更新2

我搜索了很多,我看到有些人说:静态字段在整个AppDomain中共享。但是我的网站发生了什么?

答案: Static property always null in every request after set value on ASP.NET MVC5

0 个答案:

没有答案