Ninject MVC3 - загрузчик выдает исключение «Уже инициализировано» - PullRequest
35 голосов
/ 06 мая 2011

Я создал пустой проект 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 \События \ App_Start \ NinjectMVC3.cs: 22 * ​​1009 *

[TargetInvocationException: исключение было вызвано целью вызова.]
System.RuntimeMethodHandle._InvokeMethodFast (метод IRuntimeMethodInfo, аргументы объекта, объект [объект]]SignatureStruct & sig, MethodAttributes methodAttributes, RuntimeType typeOwner) + 0
System.RuntimeMethodHandle.InvokeMethodFast (метод IRuntimeMethodInfo, цель объекта,Object [] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) + 72
System.Reflection.RuntimeMethodInfo.Invoke (Object obj, параметры BindingFlags invokeAttr, связыватель связывателя, Object [], культура CultureInfo, логическая переменная типа skipVisibility 3351014 * System.Reflection.
WebActivator.BaseActivationMethodAttribute.InvokeMethod () +199 WebActivator.ActivationManager.RunActivationMethods () +330 WebActivator.ActivationManager.RunPreStartMethods () +27 WebActivator. 101 * 1019Auntiv.в 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% стандартен,Никаких настроек не сделано.

РЕДАКТИРОВАТЬ - Проблема исчезла ...

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

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

Ответы [ 15 ]

33 голосов
/ 03 июня 2011

Посмотрите на Настройка MVC3-приложения

Короче говоря:

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

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

16 голосов
/ 16 июля 2011

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

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

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

удаление dll решило проблему.

12 голосов
/ 06 мая 2011

Скорее всего, вы наследуетесь от NinjectHttpApplication и одновременно используете AppStart. Эти два способа не следует смешивать.

Прочитайте документацию https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application

4 голосов
/ 21 августа 2012

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

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

3 голосов
/ 18 мая 2011

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

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

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

3 голосов
/ 08 мая 2011

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

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

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

UPDATE

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

DevilDog74 ответил

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

Джефф Чирчео ответил

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

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

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

2 голосов
/ 06 октября 2011

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

2 голосов
/ 01 августа 2011

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

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

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

2 голосов
/ 21 июля 2011

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

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.

1 голос
/ 03 января 2012

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

...