Есть ли способ использовать профиль кеша при ручном добавлении элементов в кеш?
Кэширование вывода в моем приложении настроено с использованием профилей вывода кеша в файле web.config. Очень удобно иметь возможность настроить кэширование для всех выходных элементов, которые в этом нуждаются, а затем настроить все параметры кэширования в одном месте.
Тем не менее, я также реализую кэширование в своих данных и логических слоях для определенных элементов. Было бы удобно, если бы я мог также ссылаться на профиль вместо жесткого кодирования параметров кэширования для данных и логических элементов, которые я хочу кэшировать, но, похоже, нет способа ссылаться на профиль в методе Insert() в кеш объекта.
В качестве альтернативы, я мог бы создать свой собственный раздел конфигурации для перечисления профилей кеша для добавленных вручную элементов.
2 ответа
Вы можете получить список ваших профилей кэша вывода, выполнив это:
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
}
Если вы имеете в виду C# Cache.Insert
В объекте вы можете добавить GUID к ключу, чтобы у каждого профиля был соответствующий GUID, который вы можете извлечь из кэша, когда захотите получить профиль позже.