我不知道在哪里开始解决这个问题,但是在尝试运行我的ASP.NET MVC应用程序时遇到异常。
这是我得到的错误:
[ActivationException:激活IntPtr时出错
没有匹配的绑定可用,并且该类型不可自我绑定。 激活路径:
- 将依赖IntPtr注入到Func {IKernel}
类型的构造函数的参数方法中- 将依赖关系Func {IKernel}注入到HttpApplicationInitializationHttpModule类型的构造函数的参数lazyKernel中
- 申请IHttpModule
醇>建议:
- 确保您已为IntPtr定义了绑定。
- 如果在模块中定义了绑定,请确保已将模块加载到内核中。
- 确保您没有意外创建多个内核。
- 如果使用构造函数参数,请确保参数名称与构造函数参数名称匹配。
- 如果您使用自动模块加载,请确保搜索路径和过滤器正确无误。
醇>
堆栈跟踪如下:
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版本。我意识到如果我使用预发布库,所有的赌注都会被取消,但我有一种感觉我做错了,因为其他人似乎没有得到同样的错误。
关于问题可能是什么或我应该从哪里开始寻找的任何想法?
答案 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: