2010-10-01 79 views
6

我剛剛將Ninject的現有實現從1.5升級到2.0。現在我看到,在很短的時間內發生很多請求時會拋出一個間歇性異常。Ninject與OnePerRequestModule相關拋出的間歇性異常

以下是引發的異常。

類型: System.ArgumentException
消息:具有相同鍵的項已被添加。
來源: Ninject
堆棧跟蹤:在System.ThrowHelper.ThrowArgumentException(ExceptionResource資源)
在System.Collections.Generic.Dictionary ` 2.插入(TKEY的關鍵,TValue值,布爾加)
在System.Collections.Generic.Dictionary ` 2.添加(TKEY的鍵,TValue值)
在Ninject.Components.ComponentContainer.CreateNewInstance(類型分量類型的實現)
在Ninject.Components.ComponentContainer.ResolveInstance(類型分量,類型實現)
at Ninject.Components.ComponentContainer.Get(Type component)
at Ninject.Components.ComponentContainer。 <CreateNewInstance> b _ _ 6(的ParameterInfo參數)
在System.Linq.Enumerable.WhereSelectArrayIterator ` 2.MoveNext()
在System.Linq.Buffer ` 1..ctor(IEnumerable的` 1源)
在系統.Linq.Enumerable.ToArray [TSource](IEnumerable的` 1源)
在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)
at System.Linq.Enumerable。 < >Ç_ _ 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源)
在Ninject.ResolutionExtensions。獲得[T](IResolutionRoot根,IParameter []參數)在NameOfConsumingSite。應用_的BeginRequest
(對象發件人,EventArgs的)...

的異常不拋出,如果我刪除OnePerRequestModule web.config中httpModules的項目,但這是增加開銷的

如果他們能提供幫助,我會事先感謝任何人!

+0

有關你的綁定的任何有趣的事情?或者它是一個隱式類自綁定的堆棧?原則上,這顯然應該工作。你有中繼版本還是你有一些二進制文件? – 2010-10-02 01:14:21

+0

沒什麼特別的,它們是在v1.5中完美工作的綁定。另外,我正在使用當前的二進制文件。 Ninject Google Group的Sean Chambers建議不要使用OnePerRequestModule,因爲InXxxxScope方法處理該責任。沒有答案的是爲什麼OnePerRequestModule仍然包含在Ninject解決方案中。我也想知道這是否可能是由GarbageCollectionCachePruner的賽車狀況造成的。 – reifnir 2010-10-04 14:34:20

回答

3

有一個多線程問題。嘗試使用在https://github.com/ninject找到的2.2 RC1。請告訴我,這個版本是否仍然存在這個問題,以確保我們沒有進一步的問題,我們必須在發佈前解決。

+1

這裏描述了具體問題(帶有重現步驟):https://github.com/ninject/ninject/issues/closed#issue/17。它在版本2.1.0.70中得到修復。 – 2011-01-11 12:53:42