C'è un modo per utilizzare l'utilizzo di un profilo di cache quando si aggiungono manualmente gli elementi alla cache?

StackOverflow https://stackoverflow.com/questions/4761657

Domanda

Ho cache di output nel mio applicazione configurata utilizzando i profili di cache di output nel web.config. E 'molto comodo per essere in grado di impostare la cache su tutte le voci di uscita che ne hanno bisogno e quindi in grado di regolare tutte le impostazioni della cache in un unico luogo.

Tuttavia, sono inoltre attuando il caching nei miei dati e strati logici per alcune voci. Sarebbe conveniente se potessi anche fare riferimento a un profilo invece di difficile codifica i parametri di cache per i dati e gli elementi logici che voglio cache, ma non sembra essere un modo per fare riferimento a un profilo nel metodo Insert () sul cache di oggetti.

Alternativly, ho potuto costruire la mia sezione di configurazione per i profili lista di cache per gli oggetti aggiunti manualmente.

È stato utile?

Soluzione

È possibile ottenere un elenco dei profili di cache di output facendo questo:

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;
        }
    }
}

E poi utilizzarlo sul vostro inserto:

/// <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
    }

Altri suggerimenti

Se si fa riferimento a C # 's oggetto Cache.Insert è possibile aggiungere un GUID alla chiave in modo che ogni profilo ha un corrispondente GUID, che è possibile estrarre dalla cache quando si desidera recuperare il profilo più tardi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top