Frage

Ich bin mit dem Ninject.Web.Mvc (die MVC 2-Version) Add-on mit ASP.NET MVC 2. Dies ist ein Auszug meiner 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;
}

Ich habe auch eine Basis RepositoryController:

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

    public RepositoryController()
    {

    }

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

So wie Sie sehen können, ist es ein sehr einfaches Setup, wo RepositoryController erwartet mit einer Instanz eines IRepository injiziert zu werden, und Ninject konfiguriert ist, eine konkrete Instanz von NHibernateRepository zu verwenden. Dies ist jedoch nicht funktioniert und die Repository Eigenschaft ist null, wenn ich den Zugriff versuchen, es in einem Controller. Allerdings, wenn ich den Code dies zu ändern, statt:

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

Dann funktioniert es gut. Weiß jemand, warum Konstruktor Injektion nicht funktioniert, aber Eigentum Injektion ist?

War es hilfreich?

Lösung

Versuchen Sie, den parameterlosen Konstruktor zu entfernen.

Ninject möglicherweise das falsche Konstruktor zu beheben Kommissionierung.

Um es zu testen, können Sie einen Haltepunkt in beiden Konstrukteure setzen könnten und sehen, welches Feuer, aber ich habe das Gefühl, es ist die parameterlos ein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top