在存储于 ASP.NET 应用程序的 Cache 对象中的项与文件、缓存键、文件或缓存键的数组或另一个 CacheDependency 对象之间建立依附性关系。CacheDependency 类监视依附性关系,以便在任何这些对象更改时,该缓存项都会自动移除。
命名空间:System.Web.Caching
程序集:System.Web(在 system.web.dll 中)
![](http://i.msdn.microsoft.com/Platform/Controls/CollapsibleArea/resources/minus.gif)
Public Class CacheDependency
Implements IDisposable
Dim instance As CacheDependency
public class CacheDependency : IDisposable
public ref class CacheDependency : IDisposable
public class CacheDependency implements IDisposable
public class CacheDependency implements IDisposable
![](http://i.msdn.microsoft.com/Platform/Controls/CollapsibleArea/resources/minus.gif)
如果向缓存添加一个依赖于另一个对象(如文件或文件数组)的项,则在该对象更改时会自动从缓存中移除该依赖项。例如,假设您基于 XML 文件中的数据创建一个 DataSet 对象。可以利用使 DataSet 依赖于 XML 文件的 CacheDependency 对象将该 DataSet 添加到缓存中。如果该 XML 文件发生更改,则 DataSet 从缓存中移除。
可以用 Add 和 System.Web.Caching.Cache.Insert 方法向应用程序缓存中添加具有依赖项的项。不能使用 Item 属性向缓存中添加具有依赖项的项。
若要设置依赖项,请创建 CacheDependency 类的一个实例,指定项依赖的文件、键或目录,然后将该依赖项传递给 Add 或 System.Web.Caching.Cache.Insert 方法。CacheDependency 实例可以表示单个文件或目录、一组文件或目录,或者带有一系列缓存键的一组文件或目录(这些缓存键表示 Cache 对象中存储的其他项)。
![](http://i.msdn.microsoft.com/Platform/Controls/CollapsibleArea/resources/minus.gif)
下面的代码示例演示如何使用 HasChanged 属性来确定 CacheDependency 是否在对 Cache 中某项的上一个请求之后已更改。将传入 start 参数的 dt 值设置为 DateTime.Now。
' Insert the cache item.
Dim dep As New CacheDependency(fileName, dt)
myCache.Insert("key", "value", dep)
' Check whether CacheDependency.HasChanged is true.
If dep.HasChanged Then
Response.Write("<p>The dependency has changed.")
Else
Response.Write("<p>The dependency has not changed.")
End If
// Insert the cache item.
CacheDependency dep = new CacheDependency(fileName, dt);
cache.Insert("key", "value", dep);
// Check whether CacheDependency.HasChanged is true.
if (dep.HasChanged)
Response.Write("<p>The dependency has changed.");
else Response.Write("<p>The dependency has not changed.");
// Insert the cache item.
CacheDependency dep = new CacheDependency(fileName, dt);
cache.Insert("key", "value", dep);
// Check whether CacheDependency.HasChanged is true.
if (dep.get_HasChanged()) {
get_Response().Write("<p>The dependency has changed.");
}
else {
get_Response().Write("<p>The dependency has not changed.");
}