Pregunta

I tienen un atributo método que espera varias propiedades para ser inyectados por Ninject 2, pero userSession y jobRepository están subiendo como nulo:

[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 en 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 para los atributos sin embargo, que la necesidad de usar la inyección propiedad. Me estoy perdiendo algo aquí?

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>();
    }
}
¿Fue útil?

Solución

Ninject2 no hace la inyección de campo, cambiarlos a las propiedades con un colocador público.

class JobAttribute : ActionFilterAttribute {
    [Inject]
    public IUserSession UserSession
    { set; private get; }

    [Inject]
    public IJobRepository JobRepository
    { set; private get; }
}

Desde el Ninject 2 Beta :

  

Las cosas que estaban en Ninject 1.x que   no están en Ninject 2:

     
      
  • inyección de Campo: 2 de ninject   inyección está ahora impulsado por la expresión   árboles, y en .NET 3.5 no hay manera   para establecer los valores de campo con una expresión   árbol. Dado que esta es una mala práctica   de todos modos, decidí cortar.
  •   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top