Я использую надстройку Ninject.Web.Mvc
(версия MVC 2) с ASP.NET MVC 2. Это отрывок из моего 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;
}
У меня тоже есть база RepositoryController
:
public class RepositoryController : Controller
{
protected IRepository Repository { get; set; }
public RepositoryController()
{
}
public RepositoryController(IRepository repository)
{
Repository = repository;
}
}
Итак, как вы можете видеть, это очень простая установка, где RepositoryController
ожидает инъекции с экземпляром IRepository
, а Ninject настроен на использование конкретного экземпляра NHibernateRepository
. Однако это не работает, и свойство Repository
имеет значение null, когда я пытаюсь получить к нему доступ в контроллере. Однако, если я изменю код на это вместо:
[Inject]
public IRepository Repository { get; set; }
Тогда все работает нормально. Кто-нибудь знает, почему инъекция конструктора не работает, а инъекция свойства есть?