有没有办法在手动将项目添加到缓存时使用缓存配置文件?

时间:2011-01-21 17:10:25

标签: asp.net asp.net-caching asp.net-cache

我在我的应用程序中使用web.config中的输出缓存配置文件配置了输出缓存。能够在需要它的所有输出项目上设置缓存非常方便,然后能够在一个地方调整所有缓存设置。

但是,我也在我的数据和逻辑层中为某些项目实现缓存。如果我还可以引用一个配置文件而不是硬编码我想要缓存的数据和逻辑项的缓存参数,那将会很方便,但是似乎没有办法在Insert()方法中引用一个配置文件。缓存对象。

另外,我可以构建自己的配置部分来列出手动添加项目的缓存配置文件。

2 个答案:

答案 0 :(得分:3)

您可以获取输出缓存配置文件的列表:

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
    }

答案 1 :(得分:0)

如果你指的是C#的Cache.Insert对象,你可以在键上附加一个GUID,这样每个配置文件都有一个相应的GUID,当你想在以后检索配置文件时,可以从缓存中提取它。 / p>