2010-10-01 10 views
6

Ho appena aggiornato un'implementazione esistente di Ninject da 1.5 a 2.0. Ora vedo generare un'eccezione intermittente quando molte richieste si verificano in un breve periodo di tempo.Ninject Eccezione intermittente generata in OnePerRequestModule

Ecco l'eccezione che viene lanciata.

Tipo: System.ArgumentException
Messaggio: è già stato aggiunto un elemento con la stessa chiave.
Fonte: Ninject
dello stack: a System.ThrowHelper.ThrowArgumentException (risorsa ExceptionResource)
a System.Collections.Generic.Dictionary ` 2.Insert (chiave TKey, TValue valore, booleano aggiuntivo)
a System.Collections.Generic.Dictionary ` 2.Add (chiave TKey, TValue valore)
a Ninject.Components.ComponentContainer.CreateNewInstance (componente tipo, attuazione Type)
a Ninject.Components.ComponentContainer.ResolveInstance (componente tipo, Tipo di implementazione)
in Ninject.Components.ComponentContainer.Get (Componente di tipo)
in Ninject.Components.ComponentContainer. <CreateNewInstance> b _ _ 6 (parametro ParameterInfo)
a System.Linq.Enumerable.WhereSelectArrayIterator ` 2.MoveNext()
a System.Linq.Buffer ` 1..ctor (IEnumerable ` 1 fonte)
presso System .Linq.Enumerable.ToArray [TSource] (IEnumerable ` 1 fonte)
a Ninject.Components.ComponentContainer.CreateNewInstance (componente tipo, attuazione Type)
a Ninject.Components.ComponentContainer.ResolveInstance (componente tipo, attuazione Type)
a Ninject.Components.ComponentContainer.Get (componente Type)
a Ninject.Components.ComponentContainer.GetT
a Ninject.KernelBase.CreateContext (richiesta IRequest, IBinding vincolante)
a Ninject.KernelBase. < > c _ _ DisplayClassa. <Risoluzione> b _ _ 6 (binding IBinding)
in System.Linq.Enumerable. < > c _ _ DisplayClass12 ` 3. <CombineSelectors> b _ _ 11 (TSource x)
a System.Linq.Enumerable.WhereSelectEnumerableIterator ` 2.MoveNext()
a System.Linq.Enumerable. <CastIterator> d _ _ aa ` 1.MoveNext()
a System.Linq.Enumerable.Single [TSource] (IEnumerable ` 1 fonte)
a Ninject.ResolutionExtensions.Get [T] (root IResolutionRoot, IParameter parametri [])
a NameOfConsumingSite .application _ BeginRequest (Object sender, EventArgs e) ...

L'eccezione non avere buttato se mi tolgo la OnePerRequestModule voce da httpModules in web.config, ma questo è l'aggiunta di ton di spese generali.

Ringrazio chiunque in anticipo se può aiutare!

+0

Qualcosa di interessante sui tuoi attacchi? O è una pila di autoadesivi di classe implicita? In linea di principio, questo ovviamente dovrebbe funzionare. Hai la versione del bagagliaio o hai qualche file binario? –

+0

Niente di eccezionale, sono gli stessi attacchi che hanno funzionato perfettamente nella v1.5. Inoltre, sto usando l'attuale binario. Sean Chambers del gruppo Ninject di Google suggerisce che OnePerRequestModule è deprecato poiché i metodi InXxxxScope gestiscono tale responsabilità. Ciò che rimane senza risposta è il motivo per cui OnePerRequestModule è ancora incluso nella soluzione Ninject. Mi chiedo anche se questo potrebbe essere causato da una condizione di competizione con GarbageCollectionCachePruner. – reifnir

risposta

3

Si è verificato un problema con il multithreading. Prova ad usare la 2.2 RC1 trovata al https://github.com/ninject. Per favore dimmi se questo problema si verifica ancora con questa versione per assicurarci di non avere ulteriori problemi che dobbiamo risolvere prima del rilascio.

+1

Il problema specifico è descritto (con passaggi per la riproduzione) qui: https://github.com/ninject/ninject/issues/closed#issue/17. È stato risolto nella versione 2.1.0.70. –

Problemi correlati