![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace WebApplication1 7 { 8 // HttpHandlerFactory 用法 9 //by Jxb 10 //at 2012年6月8日17:00:22 11 12 13 //web.config 14 /*<httpHandlers> 15 <add verb="*" path="*" type="WebApplication1.MyHandler,WebApplication1"/> 16 </httpHandlers> 17 */ 18 19 public class _Customer 20 { 21 public _Customer() 22 { 23 this.a = 1; 24 this.b = 2; 25 } 26 27 int a, b = 0; 28 } 29 /// <summary> 30 /// Summary description for Handler1 31 /// </summary> 32 33 public class MyHandler : IHttpHandlerFactory 34 { 35 36 37 public static T Factory<T>() where T : new() 38 { 39 return new T(); 40 } 41 #region IHttpHandlerFactory 成员 42 43 public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated) 44 { 45 46 string fname = url.Substring(url.IndexOf('/') + 1); 47 while (fname.IndexOf('/') != -1) 48 fname = fname.Substring(fname.IndexOf('/') + 1); 49 string cname = fname.Substring(0, fname.IndexOf('.')); 50 string className = "WebApplication1." + cname; 51 52 object h = null; 53 54 try 55 { 56 57 //测试工厂方法,相当于下面的Activator.CreateInstance 58 //_Customer ab = Factory<_Customer>(); 59 60 // 采用动态反射机制创建相应的IHttpHandler实现类。 61 h = Activator.CreateInstance(Type.GetType(className)); 62 } 63 catch (Exception e) 64 { 65 throw new HttpException("工厂不能为类型" + cname + "创建实例。", e); 66 } 67 68 return (IHttpHandler)h; 69 } 70 71 public void ReleaseHandler(IHttpHandler handler) 72 { 73 74 } 75 76 #endregion 77 } 78 79 80 81 82 83 public class Handler1 : IHttpHandler 84 { 85 #region IHttpHandler 成员 86 87 public bool IsReusable 88 { 89 get { return true; } 90 } 91 92 public void ProcessRequest(HttpContext context) 93 { 94 context.Response.Write("<html><body><h1>来自Handler1的信息。</h1></body></html>"); 95 } 96 97 #endregion 98 } 99 100 public class Handler2 : IHttpHandler 101 { 102 #region IHttpHandler 成员 103 104 public bool IsReusable 105 { 106 get { return true; } 107 } 108 109 public void ProcessRequest(HttpContext context) 110 { 111 context.Response.Write("<html><body><h1>来自Handler2的信息。</h1></body></html>"); 112 } 113 114 #endregion 115 } 116 }