Подтвердить что ты не робот

Ninject MVC3 - запуск бутстраппера "Исключено"

Я создал пустой проект Asp.Net MVC3 и использовал nuget install-package Ninject.MVC3

Без каких-либо действий (никаких зарегистрированных услуг и даже не созданных контроллеров) я запускаю приложение.

Проект разбивается по строке 22 в NinjectMVC3.cs со следующим исключением:

[InvalidOperationException: уже инициализировано!]    Ninject.Web.Mvc.Bootstrapper.Initialize(Func`1 createKernelCallback) в c:\Projects\Ninject\Maintenance2.2\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\Bootstrapper.cs > : 58    Mvc.App_Start.NinjectMVC3.Start() в c:\Projects\Events\Events\App_Start\NinjectMVC3.cs: 22

[TargetInvocationException: исключение была выбрана целью вызов.]
System.RuntimeMethodHandle._InvokeMethodFast (IRuntimeMethodInfo метод, объект, объект [] аргументы, SignatureStruct & сиг, MethodAttributes methodAttributes, RuntimeType typeOwner) +0
System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo метод, объект, объект [] аргументы, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +72
System.Reflection.RuntimeMethodInfo.Invoke(Объект obj, BindingFlags invokeAttr, Binder связующее, Object [], Культура CultureInfo, Boolean skipVisibilityChecks) +335
System.Reflection.RuntimeMethodInfo.Invoke(Объект obj, BindingFlags invokeAttr, Binder связующее, Object [], Культура Культуры) +28
System.Reflection.MethodBase.Invoke(Объект obj, Object []) +19
WebActivator.BaseActivationMethodAttribute.InvokeMethod() +199 WebActivator.ActivationManager.RunActivationMethods() +330 WebActivator.ActivationManager.RunPreStartMethods() +27 WebActivator.ActivationManager.Run() +39

Строка в NinjectMVC3.cs:

public static void Start() 
        {
            DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
            DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
            bootstrapper.Initialize(CreateKernel); // <- this one right here...
        }

Что происходит с этим? Я использовал Ninject для MVC3 в других проектах без проблем. Я замечаю, что вторая строка в методе Start() не включена в более старые (недельные) пакеты Ninject.MVC3, так что, возможно, что-то еще было повреждено и в недавнем обновлении?

Пожалуйста, помогите!

Изменить для ответа на вопрос из Remo

Это из моего global.asax.cs

 public class MvcApplication : System.Web.HttpApplication
 {

Global.asax также является 100% стандартным. Никаких корректировок не было.

EDIT - проблема исчезла...

Я честно понятия не имею, что вызвало это, но после нескольких перезапусков Visual Studio и полной перезагрузки проект работает так, как должен. Я также не могу воссоздать проблему в новых проектах.

Извините, что тратило ваше время:)

4b9b3361

Ответ 1

Проблема исчезла...

Я честно понятия не имею, что вызвало это, но после нескольких перезапусков Visual Studio и полной перезагрузки проект работает так, как должен. Я также не могу воссоздать проблему в новых проектах.

Извините, что тратило ваше время:)

UPDATE

После публикации этого ответа появилось несколько хороших ответов. Я обновляю этот ответ, чтобы собрать разные подходы в одном ответе. Надеюсь, что все в порядке, ребята:

DevilDog74 ответил

Наконец я пошел к гитубу и клонировал новый репо, загруженный Ninject.Web.Common и последний Ninject2 релиз сборки и сделал локальный релиз строить. затем я удалил пакеты nuget и сделал ссылки на сборку собранных сборников > "Ninject", "Ninject.Web.Common" и "Ninject.Web.Mvc", и мой проект начал > рабочие и контроллеры создавались со своими зависимостями, решена.

Jeff Circeo ответил

Я решил проблему, загрузив из https://github.com/ninject/ninject.web.mvcвместо использования пакета nuget. я не нужно было ничего делать после того, как я добавили ссылки.

Маркус Кинг ответил

В итоге я работал у меня удалить пакет Ninject MVC NuGet полностью и просто добавить Ninject и Ninject dll старомодный путь. Я думаю, что может быть что-то неправильно с их пакетом NuGet.

Ответ 2

Взгляните на Настройка MVC3-приложения

Короче:

У вас, вероятно, есть папка een App_Start в вашем проекте с файлом NinjectMVC3.cs.

При использовании пакета NuGet в сочетании с модификацией Global.asax(для которого нет причин) вам нужно удалить папку App_Start и удалить ссылки на WebActivator и Microsoft.Web.Infrastructure

Ответ 3

Эта ситуация возникла для меня, когда я изменил пространства имен моего проекта, а затем снова переключил его.

даже когда я очистил решение и сделал iisreset, он вернулся с "уже инициализированным".

проблема возникла из библиотек dll, которые были созданы в каталоге bin, когда я изменил пространство имен и построил проект. После изменения пространств имен и очистки решения DLL из альтернативного пространства имен все еще присутствовали и, следовательно, были загружается при запуске веб-приложения, вызывая "уже инициализированную" ошибку.

удаление библиотек dll устраняет проблему.

Ответ 5

Недавно я столкнулся с той же проблемой. В моем случае у меня есть несколько проектов в моем решении... и многое другое, что один из этих проектов содержит ссылки на NuGet для Ninject.MVC3.

Когда я обновил все версии пакетов Ninject, были созданы папки App_Start во всех проектах, имеющих ссылки на NuGet. Итак, я должен был удалить и удалить папки App_Start из проектов библиотеки классов; просто оставив папку App_Start в основном приложении MVC.

Ответ 6

Я не уверен, что это заставило ваше приложение бомбить, но я рад, что перезагрузка VS решила его. Я имел ту же ошибку, но не смог ее исправить независимо от того, сколько чистых/перестроек я сделал или сколько раз я перезапустил VS.

В итоге я работал над тем, чтобы полностью удалить Ninject MVC NuGet Package и просто добавить Ninject и Ninject dll старомодным способом. Я думаю, что может быть что-то не так с их пакетом NuGet.

Я надеюсь, что это поможет кому-то другому, я потратил несколько часов на это, когда мне было нужно сбрасывать пакет NuGet.

Ответ 7

прочитайте документы!

https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application

Какая разница между этими утверждениями?

Оба подхода точно делают то же самое. Они подключают Ninject к приложениям MVC. Единственное отличие состоит в том, что они используют другой подход для этого. Причиной использования разных утверждений является то, что пакет NuGet может обеспечить интеграцию из коробки, добавив один файл. В противном случае это потребует сложных модификаций global.asax

ПРИМЕЧАНИЕ. Если вы решите перейти к первому подходу при использовании пакета NuGet (для которого нет причин), вам необходимо удалить папку App_Start и удалить ссылки на WebActivator и Microsoft.Web.Infrastructure.

Ответ 8

У меня была такая же проблема, когда я обновил пакет Ninject.Web.MVC3 до версии 2.2.2.0. Я заметил, что это обновление добавило следующую строку в мой .csproj файл (VCS FTW!):

<Compile Include="App_Start\NinjectMVC3.cs" />

Изменение действия сборки из компиляции в контент для этого файла решило мою проблему. App_Start так же зла, как App_Code...

Ответ 9

Я решил эту проблему, вручную удалив некоторые DLL файлы в папке /bin, которые не удалялись при запуске команды Cleanup из Visual studio.

Ответ 10

У меня была та же проблема с некоторыми небольшими отличиями, которые я наследовал от NinjectHttpApplication и переопределением OnApplicationStarted. Я решил проблему, загрузив https://github.com/ninject/ninject.web.mvc вместо использования пакета nuget.

Мне не нужно было ничего делать после добавления ссылок.

Ответ 11

Я потратил около 4 часов на использование пакетов nuget, но безрезультатно.

Наконец, я отправился на gitub и клонировал новое репо, загрузил последнюю версию Ninject.Web.Common и последние выпуски релизов Ninject2 и сделал локальную сборку.

то я удалил пакеты nuget и сделал ссылки на сборку собранных сборок "Ninject", "Ninject.Web.Common" и "Ninject.Web.Mvc", и мой проект начал работать, и контроллеры создавались со своими зависимостями разрешается.

Вот как выглядит мой код, но я думаю, что в пакетах nuget может возникнуть проблема...

public class MvcApplication : NinjectHttpApplication
{
    protected override void OnApplicationStarted()
    {
        base.OnApplicationStarted();

        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

    protected override Ninject.IKernel CreateKernel()
    {
        // declaratively add the Ninject Modules that we have built to manage our dependencies...
        var modules = new INinjectModule[]{
            new RepoModule()
        };

        return new StandardKernel(modules);
    }

    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 } // Parameter defaults
        );

    }
}

Ответ 12

убедитесь, что только одна сборка имеет класс "NinjectMVC3", если a.dll, b.dll все имеют класс NinjectMVC3 в каталоге bin, будет такая ошибка!

Ответ 13

У меня была такая же проблема, и я понял, что это связано с тем, что NuGet добавил файлы NinjectMVC3.cs как в мое веб-приложение, так и в мою библиотеку DAL. Не понял, что это произошло, но как только я удалил файл из библиотеки DAL, все было в порядке.

Ответ 14

Когда вы используете nuGet, создается папка App_start, загляните в нее.

Ответ 15

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

Я столкнулся с этой проблемой с самого начала на решении, которое содержит 15 проектов, три из которых являются веб-сайтами. Я работал над одним из сайтов, когда я начал получать эту проблему без меня, изменив что-то, что, очевидно, вызовет проблему: я не просто добавил Ninject в любом месте (он уже был установлен и работал нормально), глобальные asax файлы были не из классов Ninject и ничего не было в любой папке App_Start.

После некоторого разговора с NuGet и т.д. безрезультатно (вызванный сообщениями о неразрешенных ссылках - казалось, что Ninject не был правильно привязан, но это было), я просмотрел все файлы, которые я изменил, заплатив особое внимание было уделено проектам и конфигурационным файлам, и обнаружил, что Visual Studio каким-то образом добавила один из других веб-сайтов в качестве ссылки на проект, которую я пытался запустить. В результате конфигурация Ninject запускалась дважды и вызывала проблему, поэтому основная причина была такой же, но метод зависания был другим.

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