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 ]

1 голос
/ 26 июля 2011

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

1 голос
/ 19 мая 2011

я потратил около 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
        );

    }
}
1 голос
/ 17 мая 2011

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

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

0 голосов
/ 06 сентября 2016

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

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

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

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

0 голосов
/ 10 июля 2011

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

...