Отключить кэширование MvcSiteMapProvider
Кажется, что с MvcSiteMapProvider происходит автоматическое кэширование. Есть ли механизм отключения кеширования? У нас есть написанные пользовательские процедуры кэширования, и я хочу выполнить их, вместо того чтобы полагаться на какой-либо встроенный механизм кэширования.
4 ответа
Попробуйте вызвать Refresh до отображения меню или карты сайта.
<% var sm = Html.MvcSiteMap();
((MvcSiteMapProvider.DefaultSiteMapProvider)sm.Provider).Refresh(); %>
....
<%: sm.Menu(0, 1) %>
В MvcSiteMapProvider v4 кеш теперь может быть расширен или заменен вашей собственной реализацией. Посмотрите на следующий пост в блоге, который я написал.
MvcSiteMapProvider 4.0 - расширение кеша
Под покровами теперь используется System.Runtime.Caching.ObjectCache, абстрактный класс, который можно заменить менеджером кеша по вашему выбору.
Немного хакерский, но кого это волнует
foreach (var c in from object c in HttpContext.Cache where ((System.Collections.DictionaryEntry)c).Key.ToString().Contains("__MVCSITEMAP") select c)
{
HttpContext.Cache.Remove(((System.Collections.DictionaryEntry)c).Key.ToString());
break;
}
Просматривая источник, элемент кэша всегда создается при создании карты сайта, сохраняя элемент в HttpContext.Current.Cache
, Время жизни этого элемента кэша настраивается из свойства в конфигурации cacheDuration
, Если этот атрибут отсутствует в конфигурации, по умолчанию используется значение 5. Попробуйте установить для этого атрибута конфигурации значение 0.
<siteMap defaultProvider="MvcSiteMapProvider" enabled="true">
<providers>
<clear />
<add name="MvcSiteMapProvider"
type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider"
cacheDuration="5" />
</providers>
</siteMap>