MVC2 с Ninject.Web.Mvc 2.2 и Ninject 2.2 runtime version 4.0 всегда запрашивает конструктор без параметров для контроллеров - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть предыдущий проект, в котором выполнялась среда исполнения Ninject 2.0 версии 2.0, и теперь я использую Ninject в новом проекте и использую новый Ninject, ninject web.mvc версии 2.2 для среды исполнения версии 4.0.

Каждый разЯ получаю сообщение об ошибке без конструктора без параметров

Исключительная недопустимая операция

Произошла ошибка при попытке создать контроллер типа HomeController '.Убедитесь, что у контроллера есть открытый конструктор без параметров.

Что мне не хватает.Все привязки зарегистрированы.

Нужно ли теперь определять интерфейсы для контроллеров, таких как HomeController и IHomeController, как я видел в некоторых примерах, или я вернусь к использованию более старой версии

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

В дополнение к тому, что сказал Remo Gloor, вы можете проверить, что MVC настроен для правильного использования Ninject. Я делал некоторые вещи вручную на старой версии плагина MVC, и в итоге мне пришлось просто укусить пулю и заставить Global расширить класс NinjectHttpApplication, которого я раньше избегал.

Ошибка, которую вы получаете, это ошибка, которую вы получите, если MVC попытается использовать встроенную фабрику контроллеров для производства контроллеров. Так что вы можете захотеть создать привязку пользовательского метода для вашего класса контроллера и поместить точку останова внутрь, чтобы убедиться, что он даже вызывается.

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

1 голос
/ 10 ноября 2011

Я видел эту проблему, упомянутую пару раз на форумах, где нет прямого ответа, вот решение вышеуказанной проблемы, то есть работа с последним ninject

  1. Загрузите последний Ninject сgithub.
  2. Нинъект, который я получил для MVC2, называется Ninject.Web.Mvc2-2.2.0.0-release-net-4.0 (среда выполнения 4)
  3. Теперь при добавлении ссылки добавьте Ninject.Web.Mvc.dll (проверьте версию такой же, как указано выше, щелкнув правой кнопкой мыши свойства в VS)
  4. Теперь добавьте Ninject.dll из папки lib в той же родительской папке (проверьте версию, как указано выше)
  5. Теперь добавьте CommonServiceLocator.NinjectAdapter.dll из папки расширений в родительской папке lib (проверьте версию, как указано выше).

Недостающим звеном во всех этих файлах является commonserviceLocator.dll и правильная версиядолжен совпадать.Это следует попробовать, если вы уверены, что ваши привязки верны, как у меня, и проверьте, работает ли ваш проект со старой версией.

Спасибо всем и удачи:)

1 голос
/ 10 ноября 2011

Существует одна версия, которая не отображает исключения активации должным образом, но вместо этого показывает это исключение.Скорее всего, проблема в дублировании привязки.

...