Question

J'utilise le Ninject.Web.Mvc (la version MVC 2) add-on avec ASP.NET MVC 2. Voici un extrait de mon 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;
}

J'ai aussi une RepositoryController de base:

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

    public RepositoryController()
    {

    }

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

Comme vous pouvez le voir, il est une configuration très simple où RepositoryController attend à être injecté avec une instance d'un IRepository et Ninject est configuré pour utiliser une instance de béton de NHibernateRepository. Toutefois, cela ne fonctionne pas et la propriété Repository est nulle chaque fois que je tente d'y accéder dans un contrôleur. Cependant, si je change le code à ceci:

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

Ensuite, il fonctionne très bien. Est-ce que quelqu'un sait pourquoi l'injection de constructeur ne fonctionne pas, mais l'injection de la propriété est?

Était-ce utile?

La solution

Essayez de supprimer le constructeur parameterless.

Ninject pourrait être de choisir le mauvais constructeur à résoudre.

Pour le tester, vous pouvez mettre un point d'arrêt dans les deux constructeurs et voir qui on tire, mais j'ai le sentiment que c'est celui parameterless.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top