学院首页>网络编程>ASP.NET>用System.Web.Caching.Cache保存数据类的缓存

用System.Web.Caching.Cache保存数据类的缓存

作者: 来源: 添加时间:2006-5-21 19:34:19
 public class DataProvider
 {
  public static IDataProvider Instance()
  {
//use the cache because the reflection used later is expensive
Cache cache = System.Web.HttpContext.Current.Cache;

if ( cache["IDataProvider"] == null )
{
 //get the assembly path and class name from web.config
 String prefix = "";
 NameValueCollection context =

(NameValueCollection)ConfigurationSettings.GetConfig("appSettings");
 if (context == null)
 {
  //can not get settings
  return null;
 }

String assemblyPath = context[prefix +

"DataProviderAssemblyPath"];
 String className = context[prefix +

"DataProviderClassName"];

// assemblyPath presented in virtual form, must convert to

physical path
 assemblyPath =

HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/bin/" +

assemblyPath);  

// Uuse reflection to store the constructor of the class

that implements IWebForumDataProvider
 try
 {
  cache.Insert( "IDataProvider", Assembly.LoadFrom(

assemblyPath).GetType( className ).GetConstructor(new Type[0]), new CacheDependency(

assemblyPath ) );
 }
 catch (Exception)
 {

// could not locate DLL file
  HttpContext.Current.Response.Write("<b>ERROR:</b>

Could not locate file: <code>" + assemblyPath + "</code> or could not locate class <code>" +

className + "</code> in file.");
  HttpContext.Current.Response.End();
 }
}
return (IDataProvider)( 

((ConstructorInfo)cache["IDataProvider"]).Invoke(null) );
  }
 }


站内搜索