我有一个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