2015-05-28 2 views
3

Я использую MvcDonutCaching в своем проекте и ищут способ отключить кеширование в глобальном масштабе, чтобы помочь во время отладки/тестирования.Mvc Donut Кэширование отключает кэширование программно

Я не могу найти примеров того, как достичь этого в документации, хотя я нашел CacheSettingsManager, который предоставляет свойство IsCachingEnabledGlobally, но это readonly.

У CacheSettingsManager нет конструкторов, которые позволили бы мне настроить этот параметр. Есть ли способ настройки этого параметра?

Существует альтернативное решение, которое может работать (некрасиво), но это абсолютно последнее средство и не должно быть действительно необходимо:

public class CustomOutputCache : DonutOutputCacheAttribute 
{ 
    public CustomOutputCache() 
    { 
     if(ConfigurationManager.AppSettings["UseCache"] == "false") 
     { 
      base.NoStore = true; 
      base.Duration = 0; 
     } 
    } 
} 

А потом использовать это на мои действия контроллера:

[CustomOutputCache] 
public ActionResult Homepage() 
{ 
    // etc... 
} 

Есть ли правильный способ сделать это?

ответ

0

Это уродливое решение, но вы можете рассмотреть использование флагов компиляции. Что-то вроде:

#if !DEBUG 
[DonutOutputCache] 
#endif  
public ActionResult Homepage() 
{ 
    // etc... 
} 

Это скомпилирует атрибут только при выборе не-Debug-конфигураций.

0

В случае, если кто-либо другой натыкаются на это, добавь ниже в вашем FilterConfig.cs

public class AuthenticatedOnServerCacheAttribute : DonutOutputCacheAttribute 
{ 
    private OutputCacheLocation? originalLocation; 

    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 

     //NO CACHING this way 
     if (ConfigurationManager.AppSettings["UseCache"] == "false") 
     { 
      originalLocation = originalLocation ?? Location; 
      Location = OutputCacheLocation.None; 
     } 
     //Caching is on 
     else 
     { 
      Location = originalLocation ?? Location; 
     } 

     base.OnResultExecuting(filterContext); 
    } 
} 

Теперь Вы можете добавить это к контроллерам.

[AuthenticatedOnServerCache(CacheProfile = "Cache1Day")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

Этот ответ был вдохновлен Felipe's ответ здесь. https://stackoverflow.com/a/9694955/1911240