4

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

这是我得到的错误:

[ActivationException:激活 IntPtr 时出错

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

  1. 将依赖 IntPtr 注入到 Func{IKernel} 类型的构造函数的参数方法中
  2. 将依赖Func{IKernel}注入到HttpApplicationInitializationHttpModule类型的构造函数的参数lazyKernel中
  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)

这似乎不是每个人都会遇到的错误(至少,我的谷歌搜索没有发现任何有用的东西),所以我认为我在做一些奇怪的事情,但我不知道从哪里开始调试它。

我应该提到我正在使用几个 Ninject 库(Ninject、Ninject.Web.Common、Ninject.MVC3 和 Ninject.FluentValidation),它们都是 3.0.00-RC3 版本。我意识到,如果我使用预发布库,所有的赌注都将失败,但我觉得我做错了什么,因为其他人似乎没有遇到同样的错误。

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

4

4 回答 4

10

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

kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
于 2012-05-08T12:17:26.453 回答
6

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

于 2012-03-14T05:50:35.663 回答
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")]

然后该方法被调用一次并且错误消失了。

于 2016-11-12T23:37:40.037 回答
0

我得到了完全相同的错误消息,即使代码从前一天晚上没有改变。我正在研究来自http://www.asp.net/web-api/videos/getting-started/authorization的示例代码

我因为一些愚蠢的事情失去了一个多小时。我已经将我的控制器装饰为 [Authorize],但是第二天当我开始工作并测试 api 时,我的会话不再有效,所以我认为它是代码中的一些细微变化。

希望这可以帮助像我一样刚接触 Ninject 的其他人......

我的浏览器中出现的是:
XML Parsing Error: no element found
Location: server-name/api/Cities/
Line Number 1, Column 1:

于 2012-09-08T18:38:33.283 回答