4

我不知道哪裏可以開始解決這個問題,但是當我嘗試運行我的ASP.NET MVC應用程序時出現異常。Ninject.Web.Common拋出ActivationException試圖注入依賴到HttpApplicationInitializationHttpModule

這是我得到的錯誤:

[ActivationException:錯誤激活的IntPtr

沒有匹配的綁定是可用的,並且類型不是自可綁定。 激活路徑:

  1. 注射依賴性的IntPtr的成型函數功能{的iKernel}
  2. 注射依賴Func鍵{的iKernel}的構造的參數方法成型HttpApplicationInitializationHttpModule
  3. 請求的構造方法的參數lazyKernel爲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) 

這似乎不是是一個錯誤每個人都變得(至少,我的谷歌搜索沒有打開任何東西很有用),所以我假設我正在做一些奇怪的事情,但我不知道從哪裏開始調試。

我應該提到我正在使用幾個Ninject庫(Ninject,Ninject.Web.Common,Ninject.MVC3和Ninject.FluentValidation),所有這些庫都是3.0.00-RC3版本。我意識到,如果我使用預發行庫,所有投注都關閉,但我有一種感覺,我做錯了某些事情,因爲其他人似乎沒有得到相同的錯誤。

對這個問題可能是什麼或我應該從哪裏開始尋找的想法?

回答

5

我決定刪除我的App_Start \ NinjectWebCommon.cs文件(它是在我安裝Ninject.MVC 3.0.0-rc2時創建的)並重新安裝Nuget包(rc3)。新創建的NinjectWebCommon.cs文件略有不同。問題解決了!

+0

我面對WebApi項目的同樣的問題,調試我注意到在App_Start/NinjectWebCommon.cs中的CreateKernel被調用了兩次,並且第二次崩潰,我修復了在該文件的頂部刪除2行 [組件:WebActivatorEx.PreApplicationStartMethod(typeof運算(RetailStore.App_Start.NinjectWebCommon), 「開始」)] [組件:WebActivatorEx.ApplicationShutdownMethodAttribute(typeof運算(RetailStore.App_Start.NinjectWebCommon), 「停止」)] ,然後方法是調用一次,該錯誤消失。 – CSharper 2016-11-12 23:36:07

9

您可以通過添加這兩種綁定到內核解決這個問題:

kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel); 
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); 
+10

很好,它的工作原理。但爲什麼? – vtortola 2012-05-16 10:42:19

+0

這刪除了我的mvc應用程序中的錯誤,但是路徑開始引發了有關未找到資源的異常。 – BraveNewMath 2015-06-07 05:17:52

0

我得到了確切的相同的錯誤消息,即使代碼沒有前一天晚上改變。 我正在通過示例代碼http://www.asp.net/web-api/videos/getting-started/authorization

我在愚蠢的東西上迷失了一個多小時。我已經將控制器裝飾爲[授權],但第二天當我開始工作並測試api時,我的會話不再有效,因此我認爲它在代碼中發生了微妙的變化。

希望這可以幫助其他人,因爲我誰是新Ninject ...

什麼出現在我的瀏覽器是:
XML Parsing Error: no element found
Location: server-name/api/Cities/
Line Number 1, Column 1:

1

我面臨同樣的問題,用的WebAPI項目,調試運行我注意到,在App_Start/NinjectWebCommon.cs的CreateKernel叫了兩次,它崩潰了第二次,我固定在該文件的最頂端刪除2線

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

而且然後該方法被調用一次,該錯誤消失。