Вот простой способ, если:
- Ваша основная цель - иметь возможность отключить кеш во время отладки и включить его во время развертывания
- У вас нет сложных политик кэширования (это означает, что вы действительно должны соблюдать настройки кэширования Web.config)
- У вас нет сложной системы развертывания, которая использует синтаксис кэширования Web.config
- Идеально, если вы используете XDT веб-преобразований уже
- Вы просто предполагали, что это уже сработает, и раздражены тем, что это не сработало, и вам нужно быстрое исправление!
Все, что я сделал, создал новый атрибут 'DonutCache'.
[DonutCache]
public ActionResult HomePageBody(string viewName)
{
var model = new FG2HomeModel();
return View(viewName, model);
}
Я храню настройки кэширования в Web.config (под новым пользовательским именем - чтобы избежать путаницы).
<appSettings>
<add key="DonutCachingDuration" value="5"/> <!-- debug setting -->
</appSettings>
Я создал простой вспомогательный метод для извлечения значения.
public static class Config {
public static int DonutCachingDuration
{
get
{
return int.Parse(ConfigurationManager.AppSettings["DonutCachingDuration"]);
}
}
}
К сожалению, вы можете инициализировать [Attribute]
только константой, поэтому вам нужно инициализировать атрибут в его конструкторе (к сожалению, вы не можете просто сказать [Attribute(Config.DonutCachingDuration)]
).
Примечание : Это не мешает вам устанавливать 'VariableByParam' в объявлении [DonutCache] - которое в настоящее время является единственным другим свойством, которое можно использовать для кэширования методов Action.
class DonutCacheAttribute : OutputCacheAttribute
{
public DonutCacheAttribute()
{
// get cache duration from web.config
Duration = Config.DonutCachingDuration;
}
}
Просто используйте веб-преобразование XDT, и вы готовы к развертыванию с более длинным значением.
<add key="DonutCachingDuration" value="120"
xdt:Locator="Match(key)" xdt:Transform="Replace"/>
Подсказка: Возможно, вы захотите вставить @DateTime.Now.ToString()
в ваше частичное представление, чтобы убедиться в соблюдении настроек кэша.