arow 您现在的位置: Yes!黑客联盟 >> 程序开发 >> Web开发 >> Net专区 >> 正文
专题栏目
用System.Web.Caching.Cache保存数据类的缓存           
用System.Web.Caching.Cache保存数据类的缓存
作者:YesHack.… 文章来源:YesHack.Com 更新时间:2006-7-14 7:15:07 【字体:
 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) );
  }
 }




友情提示:如果您对本文章的内容存在疑问请到点此进入论坛进行讨论

教程录入:YesHack.Com    责任编辑:YesHack.Com 
  • 上一个教程:

  • 下一个教程:
  •