he un atributo de método que espera varias propiedades para ser inyectado por Ninject 2, pero userSession
y jobRepository
están subiendo como nulo:Ninject 2 Inyección Propiedad en ActionFilterAttribute no trabajar
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class JobAttribute : ActionFilterAttribute {
[Inject]
private IUserSession userSession;
[Inject]
private IJobRepository jobRepository;
public override void OnActionExecuting(ActionExecutingContext filterContext) {
var filter = new JobFilter(userSession, jobRepository);
filter.OnActionExecuting(filterContext);
}
}
Y aquí es el método de el controlador:
[AcceptGet, Job]
public ActionResult Dimensions(Job job) {
return View(job.Building);
}
sé que tengo la configuración de trabajo, porque si uso la inyección de constructor en el controlador consiguen inyectar parámetros del controlador. Eso no me ayuda mucho en cuanto a los atributos que necesitan para usar la inyección de propiedades. ¿Me estoy perdiendo de algo?
Estas son las pociones pertinentes de Global.asax.cs:
public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication {
protected override void OnApplicationStarted() {
RegisterRoutes(RouteTable.Routes);
RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
...snip...
protected override IKernel CreateKernel() {
return new StandardKernel(
new RepositoryConfiguration(),
new AuthenticationModule(),
new AutoMapperConfiguration()
);
}
}
public class RepositoryConfiguration : NinjectModule {
public override void Load() {
Bind<ICustomerRepository>().To<CustomerRepository>();
Bind<IJobRepository>().To<JobRepository>();
}
}
public class AuthenticationModule : NinjectModule {
public override void Load() {
Bind<MbdQuote.Core.AppService.IUserSession>().To<UserSession>();
}
}
Eso es todo! Las propiedades tienen que tener un setter público para ser inyectado por Ninject. No hubiera pensado que eso importaría. – DavGarcia
Gracias por esta respuesta: estaba buscando en todas partes la solución a este problema exacto. – Mustafakidd