Gibt es eine Möglichkeit, ein Cache -Profil zu verwenden, wenn sie den Cache manuell addiert werden?

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

Frage

Ich habe Ausgabe -Caching in meiner Anwendung mithilfe von Ausgabe -Cache -Profilen im web.config konfiguriert. Es ist sehr bequem, in der Lage zu sein, alle Ausgabeelemente einrichten zu können, die es benötigen, und dann alle Cache -Einstellungen an einem Ort einstellen zu können.

Ich implementiere jedoch auch Caching in meinen Daten und Logikschichten für bestimmte Elemente. Es wäre bequem, wenn ich auch auf ein Profil verweisen könnte, anstatt die Caching -Parameter für Daten und Logikelemente zu kodieren, die ich für einen Cache möchte, aber es scheint keine Möglichkeit zu geben, ein Profil in der Methode Insert () auf der Methode zu verweisen Cache -Objekt.

Alternativ, kann ich meinen eigenen Konfigurationsabschnitt erstellen, um Cache -Profile für manuell hinzugefügte Elemente aufzulisten.

War es hilfreich?

Lösung

Sie können eine Liste Ihrer Ausgabe -Cache -Profile erhalten, die dies tun:

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

Und verwenden Sie es dann auf Ihrem Einsatz:

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

Andere Tipps

Wenn Sie sich auf C#beziehen Cache.Insert Objekt Sie können eine Richtlinie an den Schlüssel anhängen, damit jedes Profil über eine entsprechende Richtlinie verfügt, die Sie aus dem Cache extrahieren können, wenn Sie das Profil später abrufen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top