动态注册HttpModule使我们使用自定义的HttpModel时候不在需在配置文件里配置HttpModel,避免过多的配置出错情况。让我们来看看如何实现动态注册HttpModule.
First,我们实现自定义的HttpModel
- public class CustomModule : IHttpModule
- {
- public void Dispose()
- {
- //nothing to do here
- }
- public void Init(HttpApplication context)
- {
- context.BeginRequest += (sender, e) => ProcessCookie((HttpApplication)sender);
- }
- }
- }
Second,建立一个静态类,并命名为PreApplicationStartCode,并增加一个静态方法PreStart()
- public class PreApplicationStartCode
- {
- private static bool _isStarting;
- public static void PreStart()
- {
- if (!_isStarting)
- {
- _isStarting = true;
- //注意这里的动态注册,此静态方法在Microsoft.Web.Infrastructure.DynamicModuleHelper
- DynamicModuleUtility.RegisterModule(typeof(CustomModule));
- }
- }
- }
Note.这里的类名官方里面建议用PreApplicationStartCode,我没测试过,大家可以测试下用其他类名
Three,在Properties/AssemblyInfo.cs里面注册
- [assembly: PreApplicationStartMethod(typeof(MyTest.PreApplicationStartCode), "PreStart")]
通过这三步,你的HttpModule就不在需要为每个应用程序去配置了,这种方式比较适合开发组件DLL的时候,需要注册HttpModule的情况,微软的Asp.net MVC3里都是使用的动态HttpModule,有兴趣可以去看源码。