Tengo una clase de autorización personalizada que hereda de FilterAttribute y implementa IAuthorizationFilter. Estoy usando la última versión del soporte Ninject w/asp.net MVC 3.Autorización personalizada MVC 3 y Ninject IoC
El problema que tengo es que estoy usando la inyección de constructor para inyectar un repositorio. Pero cuando se llama OnAuthorization, el repositorio es nulo. Aquí está el código ...
public class MyAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
private readonly IMyRepo _MyRepo;
public MyAuthorizeAttribute() { }
public MyAuthorizeAttribute(IMyRepo myRepo)
{
_MyRepo= myRepo; //this gets initialized
}
public void OnAuthorization(AuthorizationContext filterContext)
{
_MyRepo.DoStuff(); //<< Null, wtf
}
}
Filtro Encuadernación:
Bind<IMyRepo>().To<MyRepo>().InRequestScope();
this.BindFilter<MyAuthorizeAttribute >(System.Web.Mvc.FilterScope.Controller, null).WhenControllerHas<MyAuthorizeAttribute >();
Actualización: Una cosa que he notado es este filtro es a nivel del controlador. Tengo otros filtros en el ámbito de acción que parecen funcionar correctamente ... ¿podría ser esa la razón?
Actualización 2: He confirmado que si cambio el ámbito de filtro a la acción, a continuación, el repositorio está disponible OnAuthorization (no nulo).
Esto funciona a continuación, sin embargo necesito el alcance del controlador, no la acción.
this.BindFilter<MyAuthorizeAttribute >(System.Web.Mvc.FilterScope.Action, null).WhenActionMethodHas<MyAuthorizeAttribute >();
Parece que se llama a su MyAuthorizeAttribute con el constructor predeterminado. – dexter
@dexter, no pienses que ese es el caso. Puse breakpoint y ctor con repo se llama –
¿Ha configurado el enlace del filtro en el módulo de Ninject. Mire el código de ejemplo en la sección "Inyección de dependencias para filtros" en http://www.planetgeek.ch/2010/11/13/official-ninject-mvc-extension-gets-support-for-mvc3/#more-2004 – WorldIsRound