Suponiendo que el normal, de añadir a la configuración web y las carpetas de basura después de que el hecho de que no funciona para usted no es un par de posibilidades para que en el marco actual:
Si no le importa alterar las configuraciones de Internet, pero necesita almacenar el módulo fuera de la papelera de puede utilizar System.Web.PreApplicationStartMethod a registrar un controlador de dominio de aplicación El evento .AssemblyResolve tiene el controlador de eventos cargado y devuelve el tipo
Si no desea mod el web.config o necesitan sus eventos para estar en la parte superior de la pila como puede conseguir por GACing y alterar el web.config nivel de la máquina se puede utilizar System.Web.PreApplicationStartMethod para que el código se ejecute en el inicio solo estando en el directorio bin, entonces use Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule de las bibliotecas MVC Razor. Hacer esto le da el mismo resultado que ser el último módulo en la lista de módulos de la máquina.
Si no desea modificar la configuración web y necesita estar antes en la pila de eventos, entonces necesita hacer algo para reordenar los controladores de eventos. Necesitaba hacer esto una vez para intentar depurar algo que estaba tragando errores. Un poco hurgando en el reflector y se me ocurrió con esta función para obtener los controladores de eventos existentes
Dim t As Type = target.[GetType]()
Public Function GetEventSubscribers(ByVal target As Object, ByVal eventName As String) As [Delegate]()
Dim w = CType(t.GetField("_events", BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.NonPublic).GetValue(target), System.ComponentModel.EventHandlerList)
Dim k = t.GetFields(BindingFlags.[Static] Or BindingFlags.Instance Or BindingFlags.NonPublic).Where(Function(x) x.Name.StartsWith("Event" & eventName)).Select(Function(x) x.GetValue(target)).ToList()
Dim d() As [Delegate] = k.SelectMany(Function(x)
If w(x) Is Nothing Then
New [Delegate]() {}
Else
Return w(x).GetInvocationList()
End If
End Function).ToArray
Return d
End Function
Si pasa la instancia HttpApplication a ella con una eventName de obtener todos los delegados de controladores registrados, lo que le permitirá llama a RemoveEventHandler() en cada uno de ellos.
Si lo haces al evento de error, a continuación, añadir su propio controlador, a continuación, volver a agregar los delegados pre-existentes en el orden correcto entonces sus fuegos de controlador en primer lugar, antes que cualquiera de los otros manipuladores tiene la oportunidad de destrozar el incluso el estado y el resto de la aplicación parecen no ser más sabios siempre que no modifiques el estado del evento por ti mismo.
Este es un consejo extremadamente útil. Gracias – NickSuperb