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!
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? –
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