Я создал новый проект MVC3, нажал F5, увидел страницу-образец.
Затем я использовал NuGet, чтобы получить расширение Ninject.MVC . Я изменил свой global.asax в соответствии с документацией Ninject, Как настроить приложение MVC3 :
public class MvcApplication : NinjectHttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional });
}
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
Теперь, когда я запускаю приложение, я получаю желтый экран смерти со следующим исключением:
InvalidOperationException - последовательность не содержит элементов.
в System.Linq.Enumerable.Single (...)
в строке 67 Ninject.Web.Mvc.Bootstrapper.Initialize (...).
И действительно , строка 67 этого файла вызывает .Single (), тем самым вызывая исключение.
Что я делаю не так?
источник
NinjectHttpApplication
) и настроив ядро в~/App_Start/NinjectMVC3.cs
файле (RegisterServices
методе).Я должен добавить к этому в надежде, что кто-то другой решит проблему быстрее и не захочет вырывать каждую прядь волос на своей голове, как это почти сделал я.
Мне нужно было переименовать все в моем проекте в соответствии с новыми бизнес-терминами. Я повсюду изменил пространства имен и даже изменил имя сборки (щелкните правой кнопкой мыши проект> свойства> вкладка приложения), чтобы созданная сборка соответствовала новому соглашению об именах. Переименование сборки - вот что очень разозлило Ninject!
При переименовании сборки, которая создается, при компиляции создавался новый файл с новым именем. Однако старый файл со старым именем все еще находился в каталоге bin! Если у вас есть Ninject, активируемый через добавленный класс в App_Start, тогда этот класс активации будет вызываться в ОБЕИХ сборках (старый И новый переименованный). Не спрашивайте меня, как и почему, но это так, и выдает эту ошибку «уже инициализирована».
Даже решение для очистки не работает, потому что Visual Studio удалит только генерируемые двоичные файлы, которые будут новыми переименованными. Он оставляет старых в покое, просто сидящих там.
Удалите папку bin, прежде чем пытаться сделать что-нибудь еще! Надеюсь, это избавит кого-то от траты драгоценного рабочего времени!
источник
Я обновил документацию Wiki, указанную в вашем вопросе, чтобы показать оба способа настройки приложения MVC3. Я предлагаю использовать второй вариант, который является предпочтительным для NuGetpackage.
Вместо того, чтобы быть производным от NinjectHttpApplication, он использует NinjectMVC.cs в папке AppStart, которая создается во время установки пакета. Это также место, где вы создаете ядро и где вы загружаете свои модули или где вы определяете привязки.
источник
Как сказал Алекс Форд:
У меня была специальная версия этой проблемы, которую можно было решить следующим образом:
источник
Мое решение заключалось в том, что я установил для свойства папки App_Start, Namespace Provider значение True.
Я изменил это значение на False, чтобы Resharper не выделял пространство имен, НЕ соответствующее структуре папок.
источник
Хотел добавить еще одну причину ...
Мы установили пакет Ninject.MVC3 в несколько проектов, только один из которых был настоящим приложением MVC. Однако мы забыли удалить папку App_Start.
Удаление папки App_Start из указанного проекта устранило проблему.
источник
Чтобы перейти к ответу @Chev ... это тоже была моя главная проблема. Если вы выполняете развертывание на веб-сайте Azure (теперь называется AppSite), вы хотите щелкнуть это поле в публикации, чтобы удалить старые файлы.
источник