Tengo un código en mi aplicación que necesito ejecutar en cada solicitud, antes de que cualquier otra cosa ejecute (incluso antes de la autenticación). Hasta ahora he estado usando el evento Application_BeginRequest
en mi Global.asax, y esto ha funcionado bien. Pero este código debe llegar a la base de datos, y hacer esto desde Global.asax no parece correcto por alguna razón. Además, el nuget Ninject.MVC3 que estoy utilizando no inyectará dependencias en mi ctt de HttpApplication.BeginRequest-like filter en MVC 3?
Entonces, lo que decidí hacer es mover este código a su propio filtro de acción global. El problema que estoy teniendo ahora es que no importa qué Order o FilterScope proporcione este filtro, no puedo hacer que se ejecute primero; mi filtro de autorización siempre lo supera. MSDN parece confirmar esto:
filtro de orden
Los filtros se ejecutan en el orden siguiente:
- filtros de autorización
- filtros de acción
- filtros de respuesta
- filtros de excepción
Por ejemplo, los filtros de autorización ejecutan primero y los filtros de excepción se ejecutan al final. Dentro de cada tipo de filtro, el valor Pedido especifica el orden de ejecución. Dentro de cada tipo de filtro y orden, el valor de enumeración del alcance especifica el orden para los filtros.
Sé que puedo utilizar un HttpModule, pero que no se siente muy MVCish, así que estoy tratando de agotar todas las posibilidades antes de ir por ese camino, que lleva a mi pregunta: ¿
Es Hay un equivalente BeginRequest para filtros de acción global?
estoy usando DI, por lo que el nuevo operador está fuera :(Inicializar en un controlador base sí funcionó. Sin embargo, ser forzado a heredar de un tipo base parece un poco restrictivo, la razón por la que intenté lograr esto con filtros (o -solo más indeseablemente- módulos HTTP) es debido a su modularidad. –
@Daniel, ¿qué le impide hacer 'filters.Add (DIContainer.Get());' si no desea usar el operador 'new'? –
no hay nada que me impida hacer eso. Pero preferiría no llamar directamente al contenedor, ya que sería la ubicación del servicio, no la inversión del control. Además, no me siento cómodo haciendo que mi código esté tan estrechamente vinculado a Ninject, así que estoy tratando de mantener mi kernel. Obtenga() al mínimo. –