.NET Framework Class Library
VirtualPathProvider..::.GetCacheDependency Method

Creates a cache dependency based on the specified virtual paths.

Namespace:  System.Web.Hosting
Assembly:  System.Web (in System.Web.dll)
Syntax

Visual Basic (Declaration)
Public Overridable Function GetCacheDependency ( _
    virtualPath As String, _
    virtualPathDependencies As IEnumerable, _
    utcStart As DateTime _
) As CacheDependency
Visual Basic (Usage)
Dim instance As VirtualPathProvider
Dim virtualPath As String
Dim virtualPathDependencies As IEnumerable
Dim utcStart As DateTime
Dim returnValue As CacheDependency

returnValue = instance.GetCacheDependency(virtualPath, _
    virtualPathDependencies, utcStart)
C#
public virtual CacheDependency GetCacheDependency(
    string virtualPath,
    IEnumerable virtualPathDependencies,
    DateTime utcStart
)
Visual C++
public:
virtual CacheDependency^ GetCacheDependency(
    String^ virtualPath, 
    IEnumerable^ virtualPathDependencies, 
    DateTime utcStart
)
JScript
public function GetCacheDependency(
    virtualPath : String, 
    virtualPathDependencies : IEnumerable, 
    utcStart : DateTime
) : CacheDependency

Parameters

virtualPath
Type: System..::.String
The path to the primary virtual resource.
virtualPathDependencies
Type: System.Collections..::.IEnumerable
An array of paths to other resources required by the primary virtual resource.
utcStart
Type: System..::.DateTime
The UTC time at which the virtual resources were read.

Return Value

Type: System.Web.Caching..::.CacheDependency
A CacheDependency object for the specified virtual resources.
Remarks

The default implementation of the GetCacheDependency method returns nullNothingnullptra null reference (Nothing in Visual Basic). To cache virtual resources for later use you must override either the GetCacheDependency method or the GetFileHash method.

Examples

The following code example implements the GetCacheDependency method for a custom VirtualPathProvider class. For the full code required to run the example, see the Example section of the VirtualPathProvider class overview topic.

Visual Basic
Public Overrides Function GetCacheDependency(ByVal virtualPath As String, ByVal virtualPathDependencies As IEnumerable, ByVal utcStart As Date) As CacheDependency
  If (IsPathVirtual(virtualPath)) Then

    Dim fullPathDependencies As System.Collections.Specialized.StringCollection
    fullPathDependencies = Nothing

    ' Get the full path to all dependencies.
    For Each virtualDependency As String In virtualPathDependencies
      If fullPathDependencies Is Nothing Then
        fullPathDependencies = New System.Collections.Specialized.StringCollection
      End If

      fullPathDependencies.Add(virtualDependency)
    Next

    If fullPathDependencies Is Nothing Then
      Return Nothing
    End If

    Dim fullPathDependenciesArray As String()
    fullPathDependencies.CopyTo(fullPathDependenciesArray, 0)

    Return New CacheDependency(fullPathDependenciesArray, utcStart)
  Else
    Return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart)
  End If
End Function
C#
public override CacheDependency GetCacheDependency(
  string virtualPath, 
  System.Collections.IEnumerable virtualPathDependencies, 
  DateTime utcStart)
{
  if (IsPathVirtual(virtualPath))
  {
    System.Collections.Specialized.StringCollection fullPathDependencies = null;

    // Get the full path to all dependencies.
    foreach (string virtualDependency in virtualPathDependencies)
    {
      if (fullPathDependencies == null)
        fullPathDependencies = new System.Collections.Specialized.StringCollection();

      fullPathDependencies.Add(virtualDependency);
    }
    if (fullPathDependencies == null)
      return null;

    // Copy the list of full-path dependencies into an array.
    string[] fullPathDependenciesArray = new string[fullPathDependencies.Count];
    fullPathDependencies.CopyTo(fullPathDependenciesArray, 0);
    // Copy the virtual path into an array.
    string[] virtualPathArray = new string[1];
    virtualPathArray[0] = virtualPath;

    return new CacheDependency(virtualPathArray, fullPathDependenciesArray, utcStart);
  }
  else
    return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
Platforms

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Version Information

.NET Framework

Supported in: 3.5, 3.0, 2.0
See Also

Reference

Tags :


Community Content

Garfie
Bug in this sample code
Hi,
unforunately this sample code does not work (with Asp.Net 2.0) - if you implement GetCacheDependency() exactly as it is above, you get a System.ArgumentException with the message: "Absolute path information is required".

It would be great to have a sample that works...

Regards
Garth Ormsby

Tags : contentbug

Garfie
This works...
Ok,
so I posted an hour or so before I cobbled together a working sample...
(note: assumes disk file dependencies, not virtual files in a data store):

public override CacheDependency GetCacheDependency(
string virtualPath,
IEnumerable virtualPathDependencies,
DateTime utcStart)
{
string physicalPath = GetMappedPath(virtualPath);
if (physicalPath == null)
{
// not mapped; use the standard VPP
return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}

// get list of the physical file paths of the set of virtual dependencies
List<string> filePaths = new List<string>();
foreach (string virtualDependency in virtualPathDependencies)
{
if (virtualDependency == virtualPath)
filePaths.Add(physicalPath);
else
{
string mappedPath = GetMappedPath(virtualDependency);
if (mappedPath != null)
filePaths.Add(mappedPath);
else
filePaths.Add(HttpRuntime.AppDomainAppPath + virtualDependency);
}
}
if (filePaths.Count == 0)
return null;

// this virtualPath depends on these files...
return new CacheDependency(filePaths.ToArray());
}

HTH,
Garth

Tags :

Page view tracker