// // System.Web.Caching.CachedDependency // // Author(s): // Lluis Sanchez (lluis@ximian.com) // // (C) 2005 Novell, Inc (http://www.novell.com) // // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // using System.Collections; using System.IO; using System.Security.Permissions; #if NET_2_0 using System.Text; #endif namespace System.Web.Caching { #if NET_2_0 // CAS [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class CacheDependency: IDisposable { #else // CAS - no InheritanceDemand here as the class is sealed [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] public sealed class CacheDependency: IDisposable { #endif string[] cachekeys; CacheDependency dependency; DateTime start; Cache cache; FileSystemWatcher[] watchers; bool hasChanged; #if NET_2_0 bool used; DateTime utcLastModified; #endif object locker = new object (); #if NET_2_0 public CacheDependency (): this (null, null, null, DateTime.Now) { } #endif public CacheDependency (string filename): this (new string[] { filename }, null, null, DateTime.Now) { } public CacheDependency (string[] filenames): this (filenames, null, null, DateTime.Now) { } public CacheDependency (string filename, DateTime start): this (new string[] { filename }, null, null, start) { } public CacheDependency (string [] filenames, DateTime start) : this (filenames, null, null, start) { } public CacheDependency (string[] filenames, string[] cachekeys): this (filenames, cachekeys, null, DateTime.Now) { } public CacheDependency (string[] filenames, string[] cachekeys, CacheDependency dependency): this (filenames, cachekeys, dependency, DateTime.Now) { } public CacheDependency (string[] filenames, string[] cachekeys, DateTime start): this (filenames, cachekeys, null, start) { } public CacheDependency (string[] filenames, string[] cachekeys, CacheDependency dependency, DateTime start) { if (filenames != null) { watchers = new FileSystemWatcher [filenames.Length]; for (int n=0; n start) { hasChanged = true; break; } } } if (hasChanged) DisposeWatchers (); return hasChanged; } } void OnChildDependencyChanged (object o, EventArgs e) { hasChanged = true; OnDependencyChanged (o, e); } void OnDependencyChanged (object sender, EventArgs e) { if (DependencyChanged != null) DependencyChanged (sender, e); } #if NET_2_0 protected #else internal #endif void NotifyDependencyChanged (object sender, EventArgs e) { OnDependencyChanged (sender, e); } internal event EventHandler DependencyChanged; } }