/// The DataProvider class contains a single method, Instance(), which returns an instance of the /// user-specified data provider class. /// 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) ); } }
A simple win32 windows application |
C++中几个比较不常用的关键字 |
网上看到的排序源码, 准备面试的朋友可以看看 |
用System.Web.Caching.Cache保存数据类的缓存 |
一本书, 一段源码, 推荐给大家 |