Ninject.Web.Mvc надстройка не работает с ASP.NET MVC 2 - PullRequest
0 голосов
/ 14 октября 2010

Я использую надстройку 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; }

Тогда все работает нормально. Кто-нибудь знает, почему инъекция конструктора не работает, а инъекция свойства есть?

1 Ответ

1 голос
/ 14 октября 2010

Попробуйте удалить конструктор без параметров.

Возможно, Ninject выбрал неправильный конструктор для разрешения.

Чтобы проверить это, вы можете установить точку останова в обоих конструкторах и посмотреть, какой из них срабатывает, но у меня есть ощущение, что это параметр без параметров.

...