Есть ли способ использовать профиль кеша при ручном добавлении элементов в кеш? - PullRequest
2 голосов
/ 21 января 2011

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

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

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

Ответы [ 2 ]

3 голосов
/ 21 января 2011

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

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 голосов
/ 21 января 2011

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

...