Pregunta

Estoy usando el Ninject.Web.Mvc (la versión MVC 2) complemento con ASP.NET MVC 2. Este es un extracto de mi Global.asax.cs:

protected override void OnApplicationStarted()
{
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes;
    // RegisterAllControllersIn() is not available in the MVC 2 version of Ninject
}

protected override IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Bind<IRepository>().To<NHibernateRepository>();

    return kernel;
}

También tiene una base de RepositoryController:

public class RepositoryController : Controller
{
    protected IRepository Repository { get; set; }

    public RepositoryController()
    {

    }

    public RepositoryController(IRepository repository)
    {
        Repository = repository;
    }
}

Así como se puede ver, es una configuración muy simple donde RepositoryController espera ser inyectado con una instancia de un IRepository y Ninject está configurado para utilizar una instancia concreta de NHibernateRepository. Sin embargo, esto no funciona y la propiedad Repository es nula siempre que intente acceder a ella en un controlador. Sin embargo, si cambio el código para esto en su lugar:

[Inject]
public IRepository Repository { get; set; }

A continuación, trabaja muy bien. ¿Alguien sabe por qué la inyección de constructor no está funcionando, pero la inyección propiedad es?

¿Fue útil?

Solución

Trate de retirar el constructor sin parámetros.

Ninject podría estar recogiendo el constructor equivocada de resolver.

Para probarlo, se puede poner un punto de interrupción en los dos constructores y ver que uno incendios, pero tengo la sensación de que es el que sin parámetros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top