No, esto no es un error. Los controladores de eventos solo pueden vincularse a los eventos HttpApplication
durante la inicialización de IHttpModule
y está intentando agregarlos en algún lugar del Page_Init
(mi suposición).
Por lo tanto, debe registrar dinámicamente un módulo http con los controladores de eventos deseados. Si es menor de .NET 4 hay una buena noticia para usted - no es PreApplicationStartMethodAttribute
atributo (referencia: Three Hidden Extensibility Gems in ASP.NET 4):
Este nuevo atributo le permite tener ejecución de códigos de forma temprana en el ASP.NET canalización cuando se inicia una aplicación. Me refiero a manera temprana, incluso antes de Application_Start
.
Así las cosas que quedan son bastante simple: usted necesita para crear su propio módulo HTTP con controladores de eventos que desea, y inicializador módulo de atributo a su archivo AssemblyInfo.cs
. Aquí está un ejemplo de módulo:
public class MyModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
public void Dispose()
{
}
void context_BeginRequest(object sender, EventArgs e)
{
}
}
Para registrar módulo de forma dinámica se puede utilizar DynamicModuleUtility.RegisterModule
método del conjunto Microsoft.Web.Infrastructure.dll
:
public class Initializer
{
public static void Initialize()
{
DynamicModuleUtility.RegisterModule(typeof(MyModule));
}
}
lo único que queda es añadir el atributo necesario para su AssemblyInfo.cs
:
[assembly: PreApplicationStartMethod(typeof(Initializer), "Initialize")]