Take the 2-minute tour ×

I'm writing an app where 3rd party vendors can write plugin DLLs and drop them into the web app's bin directory. I want the ability for these plugins to be able to register their own HttpModules if necessary.

Is there anyway that I can add or remove HttpModules from and to the pipeline at runtime without having a corresponding entry in the Web.Config, or do I have to programmatically edit the Web.Config when adding / removing modules? I know that either way is going to cause an AppDomain restart but I'd rather be able to do it in code than having to fudge the web.config to achieve the same effect.

share|improve this question
add comment

4 Answers

up vote 26 down vote accepted

It has to be done at just the right time in the HttpApplication life cycle which is when the HttpApplication object initializes (multiple times, once for each instance of HttpApplication). The only method where this works correct is HttpApplication Init().

To hook up a module via code you can run code like the following instead of the HttpModule definition in web.config:

  public class Global : System.Web.HttpApplication
     // some modules use explicit interface implementation
     // by declaring this static member as the IHttpModule interface
     // we work around that
     public static IHttpModule Module = new xrnsToashxMappingModule();
     public override void Init()

All you do is override the HttpApplication's Init() method and then access the static instance's Init method. Init() of the module hooks up the event and off you go.

Via Rick Strahl's blog

share|improve this answer
One of the modules we are using is working correctly when referenced from web.config, but can't be instantiated directly (as shown in your code) because it's declared friend. Any idea of which context should I instantiate it from? –  Patonza Dec 1 '09 at 11:20
add comment

Realize this is an old question, but asp.net 4 provides some new capablities that can help here.

Specifically, ASP.NET 4 provides a PreApplicationStartMethod capability that can be used to add HttpModules programmatically.

I just did a blog post on that at http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx.

The basic idea is you create a derived HttpApplication that provides ability to add HttpModules dynamically at startup time, and it then initializes them into the pipeline whenever each HttpApplication instance is created within the app-domain.

share|improve this answer
Blog dead... wayback link: wayback.archive.org/web/20120719043729/http://www.nikhilk.net/… –  felickz Jan 31 '13 at 16:58
add comment

The dll Microsoft.Web.Infrastructure.dll has a method for this inside the class DynamicModuleUtility. The dll is shipped with WebPages 1.0

public static class PreApplicationStartCode
    private static bool _startWasCalled;

    public static void Start()
        if (_startWasCalled) return;

        _startWasCalled = true;
share|improve this answer
add comment

AFAIK you can do it only via the web.config. However, it is pretty easy to use XML to edit the web.config from code.

share|improve this answer
Yes but I was hoping there would be a less Benny Hill method of doing this. –  jmcd Oct 27 '08 at 13:23
"a less Benny Hill method" LOL! –  Mauricio Scheffer Mar 7 '10 at 17:45
add comment

Your Answer


