我刚刚将Ninject的现有实现从1.5升级到2.0。我现在看到在短时间内发生许多请求时会出现间歇性异常。
这是抛出的异常。
类型: System.ArgumentException
消息:已添加具有相同密钥的项目 来源: Ninject
System.ThrowHelper.ThrowArgumentException(ExceptionResource资源)中的堆栈跟踪:
在System.Collections.Generic.Dictionary`2.Insert(TKey键,TValue值,布尔加)
在System.Collections.Generic.Dictionary`2.Add(TKey键,TValue值)
在Ninject.Components.ComponentContainer.CreateNewInstance(类型组件,类型实现)
在Ninject.Components.ComponentContainer.ResolveInstance(类型组件,类型实现)
在Ninject.Components.ComponentContainer.Get(类型组件)
在Ninject.Components.ComponentContainer。< CreateNewInstance> b__6(ParameterInfo参数)
在System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
在System.Linq.Buffer`1..ctor(IEnumerable`1 source)
在System.Linq.Enumerable.ToArray [TSource](IEnumerable`1 source)
在Ninject.Components.ComponentContainer.CreateNewInstance(类型组件,类型实现)
在Ninject.Components.ComponentContainer.ResolveInstance(类型组件,类型实现)
在Ninject.Components.ComponentContainer.Get(类型组件)
在Ninject.Components.ComponentContainer.GetT
在Ninject.KernelBase.CreateContext(IRequest请求,IBinding绑定)
在Ninject.KernelBase。<> c__DisplayClassa。< Resolve> b__6(IBinding binding)
在System.Linq.Enumerable。<> c__DisplayClass12`3。< CombineSelectors> b__11(TSource x)
在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
在System.Linq.Enumerable。< CastIterator> d__aa`1.MoveNext()
在System.Linq.Enumerable.Single [TSource](IEnumerable`1 source)
在Ninject.ResolutionExtensions.Get [T](IResolutionRoot root,IParameter []参数)
at NameOfConsumingSite .Application_BeginRequest(Object sender,EventArgs e)...
如果我从web.config中的OnePerRequestModule
中删除httpModules
项,但是添加 ton 的开销,则不会抛出异常。
我提前感谢任何人,如果他们能提供帮助的话!
答案 0 :(得分:3)
存在多线程问题。尝试使用https://github.com/ninject处的2.2 RC1。请告诉我此版本是否仍然出现此问题,以确保我们在发布之前没有其他问题需要修复。