Obtener el valor del atributo “vary-by” de la etiqueta helper de caché “” desde C#.
Quiero limpiar la memoria caché por una clave específica generada por el ayudante de etiquetas
“`C#
public partial class MemoryCacheManager : CacheKeyService, ILocker, IStaticCacheManager
{
private readonly CacheTagHelperMemoryCacheFactory _factory;
public MemoryCacheManager(AppSettings appSettings, IMemoryCache memoryCache,
CacheTagHelperMemoryCacheFactory factory) : base(appSettings)
{
_memoryCache = memoryCache;
_factory = factory;
}
<pre><code>public Task ClearAsync()
{
PropertyInfo prop = _factory.Cache.GetType().GetProperty("EntriesCollection", BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Public);
var allInnerCacheTags = prop.GetValue(_factory.Cache) as ICollection;
foreach (var item in allInnerCacheTags)
{
object cacheKeyOfTag = item.GetType().GetProperty("Key", BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Public);
_memoryCache.Remove(cacheKeyOfTag);
}
}
</code></pre>
}
“`
Pero quiero eliminar la entrada de caché por clave específica como se muestra en la imagen adjunta.
¿Existe alguna manera de obtener el valor de _varyBy?
davy.ai
Sí, es posible eliminar una entrada de caché mediante una clave específica generada por el ayudante de etiquetas. Puede modificar el método
ClearAsync
en la claseMemoryCacheManager
para aceptar un parámetro para la clave de caché que desea eliminar. Aquí tienes un ejemplo de fragmento de código que puedes agregar a la clase:Luego puedes llamar al método
RemoveAsync
y pasar la clave de caché que deseas eliminar. Si deseas obtener el valor de la propiedad_varyBy
, puedes modificar el métodoRemoveAsync
para incluir una verificación del parámetro_varyBy
en la clave de caché. Aquí tienes un ejemplo de fragmento de código que puedes agregar a la clase:Este fragmento de código verifica si la clave de caché tiene un parámetro
_varyBy
y luego extrae y usa su valor. Puedes modificar este comportamiento según tus necesidades.