62,041
社区成员
发帖
与我相关
我的任务
分享
namespace CanYouLib.Caching.FileBasedCachingProvider
{
public class FBCachingProvider : CachingProvider
{
public FBCachingProvider()
{
_providerConfiguration = ProviderConfiguration.GetProviderConfiguration( ProviderType );
}
private const string ProviderType = "caching";
private ProviderConfiguration _providerConfiguration;
internal static string CachingDirectory = Globals.ApplicationMapPath + "\\Cache\\";
internal const string CacheFileExtension = ".resources";
private static System.Web.Caching.Cache _objCache;
private static System.Web.Caching.Cache objCache
{
get
{
//create singleton of the cache object
if( _objCache == null )
{
_objCache = HttpRuntime.Cache;
}
return _objCache;
}
}
public override object GetItem(string CacheKey)
{
return objCache[CacheKey];
}
public override object GetPersistentCacheItem( string CacheKey, Type objType )
{
object obj = objCache[CacheKey];
if( obj != null )
{
return objCache[CacheKey];
}
else if( DataCache.CachePersistenceEnabled )
{
Stream objStream;
string f = GetFileName( CacheKey );
if( File.Exists( f ) )
{
objStream = File.OpenRead( f );
XmlSerializer serializer = new XmlSerializer( objType );
TextReader tr = new StreamReader( objStream );
obj = serializer.Deserialize( tr );
tr.Close();
Insert( CacheKey, obj, true );
}
}
return obj;
}
public override void Insert( string CacheKey, object objObject, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}
string f = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f, objObject );
}
else
{
d = null;
}
objCache.Insert( CacheKey, objObject, d );
}
public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}
string[] f = new string[1];
f[0] = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}
else
{
d = objDependency;
}
objCache.Insert( CacheKey, objObject, d );
}
public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, DateTime AbsoluteExpiration, TimeSpan SlidingExpiration, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}
string[] f = new string[1];
f[0] = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}
else
{
d = objDependency;
}
objCache.Insert( CacheKey, objObject, d, AbsoluteExpiration, SlidingExpiration );
}
public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, DateTime AbsoluteExpiration, TimeSpan SlidingExpiration, CacheItemPriority Priority, CacheItemRemovedCallback OnRemoveCallback, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}
string[] f = new string[1];
f[0] = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}
else
{
d = objDependency;
}
objCache.Insert( CacheKey, objObject, d, AbsoluteExpiration, SlidingExpiration, Priority, OnRemoveCallback );
}
public override void Remove( string CacheKey )
{
if( objCache[CacheKey] != null )
{
objCache.Remove( CacheKey );
string f = GetFileName( CacheKey );
}
}
public override void RemovePersistentCacheItem( string CacheKey )
{
if( objCache[CacheKey] != null )
{
objCache.Remove( CacheKey );
if( DataCache.CachePersistenceEnabled == true )
{
string f = GetFileName( CacheKey );
DeleteCacheFile( f );
}
}
}
public override string PurgeCache()
{
//省略
}
private int PurgeCacheFiles( string[] strFiles )
{
//省略
return PurgedFiles;
}
private static string GetFileName( string FileName )
{
//省略
}
private static void CreateCacheFile( string FileName )
{
StreamWriter s;
if( ! File.Exists( FileName ) )
{
s = File.CreateText( FileName );
if( s != null )
{
s.Close();
}
}
}
private static void CreateCacheFile( string FileName, object ObjectToPersist )
{
string str = XmlUtils.Serialize( ObjectToPersist );
StreamWriter s;
if( ! File.Exists( FileName ) )
{
s = File.CreateText( FileName );
s.Write( str );
if( s != null )
{
s.Close();
}
}
}
private static void DeleteCacheFile( string FileName )
{
if( File.Exists( FileName ) )
{
File.Delete( FileName );
}
}
}
}