tag route page net asp asp.net web-config httpmodule

asp.net - page - asp route tag helper



Registra programáticamente HttpModules en tiempo de ejecución (4)

Estoy escribiendo una aplicación donde los proveedores de terceros pueden escribir archivos DLL de complemento y colocarlos en el directorio bin de la aplicación web. Quiero la capacidad de que estos complementos puedan registrar sus propios HttpModules si es necesario.

¿Hay alguna forma de que pueda agregar o eliminar HttpModules desde y hacia la canalización en tiempo de ejecución sin tener una entrada correspondiente en Web.Config, o tengo que editar programáticamente el Web.Config al agregar / eliminar módulos? Sé que de cualquier manera va a causar un reinicio de AppDomain, pero prefiero poder hacerlo en código que tener que fudge web.config para lograr el mismo efecto.


Tiene que hacerse en el momento justo en el ciclo de vida HttpApplication, que es cuando el objeto HttpApplication se inicializa (varias veces, una vez para cada instancia de HttpApplication). El único método en el que esto funciona correctamente es HttpApplication Init ().

Para conectar un módulo mediante código, puede ejecutar código como el siguiente en lugar de la definición de HttpModule en 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); } }

Todo lo que debes hacer es anular el método Init () de HttpApplication y luego acceder al método Init de la instancia estática. Init () del módulo conecta el evento y listo.

A través del blog de Rick Strahl


Tenga en cuenta que esta es una vieja pregunta, pero asp.net 4 proporciona algunas capacidades nuevas que pueden ayudar aquí.

Específicamente, ASP.NET 4 proporciona una capacidad PreApplicationStartMethod que se puede utilizar para agregar HttpModules mediante programación.

Acabo de publicar un blog en http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx .

La idea básica es crear una HttpApplication derivada que proporcione la capacidad de agregar HttpModules dinámicamente en el momento del inicio, y luego los inicializa en la tubería siempre que cada instancia de HttpApplication se cree dentro del dominio de la aplicación.


El dll Microsoft.Web.Infrastructure.dll tiene un método para esto dentro de la clase DynamicModuleUtility. El dll se envía con WebPages 1.0

public static class PreApplicationStartCode { private static bool _startWasCalled; public static void Start() { if (_startWasCalled) return; _startWasCalled = true; DynamicModuleUtility.RegisterModule(typeof(EventTriggeringHttpModule)); } }


En las nuevas versiones de ASP MVC, puede usar Package Manager para agregar una referencia a WebActivatorX y luego hacer algo como esto

using WhateverNameSpacesYouNeed; [assembly: WebActivatorEx.PreApplicationStartMethod(typeof(YourApp.SomeNameSpace.YourClass), "Initialize")] namespace YourApp.SomeNameSpace { public static void Initialize() { DynamicModuleUtility.RegisterModule( ... the type that implements IHttpModule ... ); } }