Ninject.Web.Common выбрасывает ActivationException, пытаясь внедрить зависимости в HttpApplicationInitializationHttpModule - PullRequest
4 голосов
/ 14 марта 2012

Я не уверен, с чего начать, но я получаю исключение при попытке запустить мое приложение ASP.NET MVC.

Вот ошибка, которую я получаю:

[ActivationException: Ошибка активации IntPtr

Нет доступных привязок, и тип не является самосвязываемым.Путь активации:

  1. Инъекция зависимости IntPtr в метод параметров конструктора типа Func {IKernel}
  2. Инжекция зависимости Func {IKernel} в параметр lazyKernel конструктора типа HttpApplicationInitializationHttpModule
  3. Запрос на IHttpModule

Предложения:

  1. Убедитесь, что вы определили привязку для IntPtr.
  2. Если привязка была определена вмодуль, убедитесь, что модуль был загружен в ядро.
  3. Убедитесь, что вы случайно не создали более одного ядра.
  4. Если вы используете аргументы конструктора, убедитесь, что имя параметра соответствуетимя параметра конструкторов.
  5. Если вы используете автоматическую загрузку модуля, убедитесь, что путь поиска и фильтры правильные.

Трассировка стека выглядит следующим образом:

   at Ninject.KernelBase.Resolve(IRequest request) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 359
   at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 197
   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 165
   at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 114
   at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 96
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 96
   at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:line 157
   at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 386
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
   at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 197
   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:line 165
   at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 114
   at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 96
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:line 96
   at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:line 157
   at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 386
   at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
   at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Ninject.Web.Common.NinjectHttpModule.Init(HttpApplication context) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\NinjectHttpModule.cs:line 41
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

Это не похоже на ошибку, которую получают все (по крайней мере, мои поиски в Google ничего не нашлиsefuL), поэтому я предполагаю, что я делаю что-то странное, но я не знаю, с чего начать отладку.

Я должен упомянуть, что я использую несколько библиотек Ninject (Ninject, Ninject.Web.Common,Ninject.MVC3 и Ninject.FluentValidation), все из которых являются версией 3.0.00-RC3.Я понимаю, что все ставки отменены, если я использую предварительные версии библиотек, но у меня есть ощущение, что я делаю что-то не так, потому что другие, похоже, не получают ту же ошибку.

Есть мысли о том, чтопроблема может быть или где я должен начать искать?

Ответы [ 4 ]

10 голосов
/ 08 мая 2012

Вы можете исправить это, добавив две привязки к ядру:

kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
5 голосов
/ 14 марта 2012

Я решил удалить свой файл App_Start \ NinjectWebCommon.cs (который был создан при установке Ninject.MVC 3.0.0-rc2) и переустановить пакет Nuget (rc3).Недавно созданный файл NinjectWebCommon.cs немного отличался.Проблема решена!

2 голосов
/ 13 ноября 2016

Я столкнулся с той же проблемой с проектом WebApi, отлаживая, я заметил, что CreateKernel в App_Start / NinjectWebCommon.cs вызывался дважды, и во второй раз, когда он вылетал, я исправил удаление двух строк в самом верху этого файла

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(RetailStore.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(RetailStore.App_Start.NinjectWebCommon), "Stop")]

А затем метод был вызван один раз, и ошибка исчезла.

0 голосов
/ 08 сентября 2012

Я получил точно такое же сообщение об ошибке, хотя код не изменился с прошлой ночи.Я работал над примером кода из http://www.asp.net/web-api/videos/getting-started/authorization

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

Надеюсь, что это поможет кому-то, кто новичок в Ninject, как и я ...

В моем браузере появилось следующее: XML Parsing Error: no element found<br /> Location: server-name/api/Cities/<br /> Line Number 1, Column 1:

...