Programmatically register HttpModules at runtime

前端 未结 5 1786
深忆病人
深忆病人 2020-12-02 11:29

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 registe

相关标签:
5条回答
  • 2020-12-02 11:49

    This worked for me for dynamic registration.

    RegisterModule(typeof(RequestLoggerModule));
    
    public class RequestLoggerModule : IHttpModule
        { ... }
    

    https://docs.microsoft.com/en-us/dotnet/api/system.web.httpapplication.registermodule?view=netframework-4.7.2

    0 讨论(0)
  • 2020-12-02 11:50

    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()
         {
             base.Init();
             Module.Init(this);
         }
      }
    

    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

    0 讨论(0)
  • 2020-12-02 11:56

    Realize this is an old question, but asp.net 4 provides some new capabilities 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.

    0 讨论(0)
  • 2020-12-02 11:57

    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;
            DynamicModuleUtility.RegisterModule(typeof(EventTriggeringHttpModule));
        }
    }
    
    0 讨论(0)
  • 2020-12-02 12:01

    In new versions of ASP MVC you can use Package Manager to add a reference to WebActivatorX and then do something like this

    using WhateverNameSpacesYouNeed;
    
    [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(YourApp.SomeNameSpace.YourClass), "Initialize")]
    namespace YourApp.SomeNameSpace
    {
      public static void Initialize()
      {
        DynamicModuleUtility.RegisterModule( ... the type that implements IHttpModule ... );
      }
    }
    
    0 讨论(0)
提交回复
热议问题