2011-01-21 2 views
2

У меня есть кэширование вывода в моем приложении, настроенное с использованием профилей выходных кэшей в файле web.config. Очень удобно настраивать кэширование на всех элементах вывода, которые в ней нуждаются, а затем настраивать все настройки кеша в одном месте.Можно ли использовать профиль кеша при ручном добавлении элементов в кеш?

Однако я также реализую кэширование в своих данных и логических уровнях для определенных элементов. Было бы удобно, если бы я мог также ссылаться на профиль вместо жесткого кодирования параметров кэширования данных и логических элементов, которые я хочу кэшировать, но, похоже, не существует способа ссылаться на профиль в методе Insert() на кеш-объект.

Альтернативно, я мог бы создать свой собственный раздел конфигурации для отображения профилей кеша для добавленных вручную элементов.

ответ

3

Вы можете получить список профилей кэша вывода как это сделать:

private Dictionary<string, OutputCacheProfile> _outputCacheProfiles; 
/// <summary> 
/// Initializes <see cref="OutputCacheProfiles"/> using the settings found in 
/// "system.web\caching\outputCacheSettings" 
/// </summary> 
void InitializeOutputCacheProfiles(
      System.Configuration.Configuration appConfig, 
      NameValueCollection providerConfig) 
{ 
    _outputCacheProfiles = new Dictionary<string, OutputCacheProfile>(); 

    OutputCacheSettingsSection outputCacheSettings = 
      (OutputCacheSettingsSection)appConfig.GetSection("system.web/caching/outputCacheSettings"); 

    if(outputCacheSettings != null) 
    { 
     foreach(OutputCacheProfile profile in outputCacheSettings.OutputCacheProfiles) 
     { 
      _outputCacheProfiles[profile.Name] = profile; 
     } 
    } 
} 

И затем использовать его на вставке:

/// <summary> 
/// Gets the output cache profile with the specified name 
/// </summary> 
public OutputCacheProfile GetOutputCacheProfile(string name) 
{ 
    if(!_outputCacheProfiles.ContainsKey(name)) 
    { 
     throw new ArgumentException(String.Format("The output cache profile '{0}' is not registered", name)); 
    } 
    return _outputCacheProfiles[name]; 
} 

    /// <summary> 
    /// Inserts the key/value pair using the specifications of the output cache profile 
    /// </summary> 
    public void InsertItemUsing(string outputCacheProfileName, string key, object value) 
    { 
     OutputCacheProfile profile = GetOutputCacheProfile(outputCacheProfileName); 
     //Get settings from profile to use on your insert instead of hard coding them 
    } 
0

Если вы имеете в виду объект C12 Cache.Insert, вы можете добавить GUID к ключу, чтобы каждый профиль имел соответствующий GUID, который вы можете извлечь из кеша, когда вы хотите получить профиль позже.