Ninject.Web.Mvc add-on non funziona con ASP.NET MVC 2
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à è?
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.