Есть ли способ использовать профиль кэша при вручную добавлять элементы в кэш?
-
16-10-2019 - |
Вопрос
У меня есть кэширование вывода в моем приложении, настроенном с использованием профилей выходного кэша в web.config. Очень удобно иметь возможность настроить кэширование на всех необходимых элементах вывода, а затем иметь возможность настраивать все настройки кэша в одном месте.
Тем не менее, я также внедряю кэширование в своих данных и логических слоях для определенных элементов. Было бы удобно, если бы я также мог ссылаться на профиль вместо жесткого кодирования параметров кэширования для данных и логических элементов, которые я хочу кэш, но, похоже, нет способа ссылаться на профиль в методе insert () на кэш -объект.
Альтернативно, я мог бы создать свой собственный раздел конфигурации для перечисления профилей кэша для добавленных вручную элементов.
Решение
Вы можете получить список ваших профилей кэша вывода, делая это:
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
Объект. Вы можете добавить руководство к ключу, чтобы каждый профиль имел соответствующее руководство, которое вы можете извлечь из кэша, когда вы хотите получить профиль позже.