Domanda

Sto utilizzando il Ninject.Web.Mvc (la versione MVC 2) add-on con ASP.NET MVC 2. Questo è un estratto del mio 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;
}

Ho anche una RepositoryController di base:

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

    public RepositoryController()
    {

    }

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

Quindi, come potete vedere, è molto semplice configurazione in cui RepositoryController si aspetta di essere iniettato con un'istanza di un IRepository, e Ninject è configurato per utilizzare un'istanza concreta di NHibernateRepository. Tuttavia, questo non funziona e la proprietà Repository è null ogni volta che provo per accedervi in ??un controllore. Tuttavia, se cambio il codice per questo, invece:

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

Poi funziona benissimo. Qualcuno sa perché l'iniezione costruttore non funziona, ma l'iniezione proprietà è?

È stato utile?

Soluzione

Prova a rimuovere il costruttore senza parametri.

Ninject potrebbe essere raccogliendo il costruttore sbagliato per risolvere.

Per verificare il lavoro svolto, si potrebbe mettere un punto di interruzione in entrambi i costruttori e vedere che uno incendi, ma ho la sensazione che sia l'uno senza parametri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top