Ninject.Web.Common抛出ActivationException试图将依赖注入HttpApplicationInitializationHttpModule

时间:2012-03-13 23:49:37

标签: asp.net-mvc asp.net-mvc-3 ninject ninject.web.mvc ninject.web

我不知道在哪里开始解决这个问题,但是在尝试运行我的ASP.NET MVC应用程序时遇到异常。

这是我得到的错误:

  

[ActivationException:激活IntPtr时出错

     

没有匹配的绑定可用,并且该类型不可自我绑定。   激活路径:

     
      
  1. 将依赖IntPtr注入到Func {IKernel}
  2. 类型的构造函数的参数方法中   
  3. 将依赖关系Func {IKernel}注入到HttpApplicationInitializationHttpModule类型的构造函数的参数lazyKernel中
  4.   
  5. 申请IHttpModule
  6.         

    建议:

         
        
    1. 确保您已为IntPtr定义了绑定。
    2.   
    3. 如果在模块中定义了绑定,请确保已将模块加载到内核中。
    4.   
    5. 确保您没有意外创建多个内核。
    6.   
    7. 如果使用构造函数参数,请确保参数名称与构造函数参数名称匹配。
    8.   
    9. 如果您使用自动模块加载,请确保搜索路径和过滤器正确无误。
    10.   

堆栈跟踪如下:

   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版本。我意识到如果我使用预发布库,所有的赌注都会被取消,但我有一种感觉我做错了,因为其他人似乎没有得到同样的错误。

关于问题可能是什么或我应该从哪里开始寻找的任何想法?

4 个答案:

答案 0 :(得分:10)

您可以通过将这两个绑定添加到内核来解决此问题:

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

答案 1 :(得分:5)

我决定删除我的App_Start \ NinjectWebCommon.cs文件(在我安装Ninject.MVC 3.0.0-rc2时创建)并重新安装Nuget包(rc3)。新创建的NinjectWebCommon.cs文件略有不同。问题解决了!

答案 2 :(得分:2)

我遇到了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")]

然后调用该方法一次,bug就消失了。

答案 3 :(得分: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: