2010-10-01 24 views
6

Acabo de actualizar una implementación existente de Ninject de 1.5 a 2.0. Ahora veo una excepción intermitente cuando se producen muchas solicitudes en un corto período de tiempo.Ninject Excepción intermitente lanzada relacionada con OnePerRequestModule

Aquí está la excepción que se está lanzando.

Tipo: System.ArgumentException
mensaje: un elemento con la misma clave ya se ha agregado.
Fuente: Ninject
Seguimiento de la pila: en System.ThrowHelper.ThrowArgumentException (recurso ExceptionResource)
en System.Collections.Generic.Dictionary ` 2.Inserte (clave TKey, valor TValue, complemento de Boole)
en System.Collections.Generic.Dictionary ` 2.Add (clave TKey, valor TValue)
en Ninject.Components.ComponentContainer.CreateNewInstance (componente Tipo, aplicación Tipo)
en Ninject.Components.ComponentContainer.ResolveInstance (componente Tipo, Tipo de implementación)
en Ninject.Components.ComponentContainer.Get (Tipo de componente)
en Ninject.Components.ComponentContainer. <CreateNewInstance> b _ _ 6 (parámetro ParameterInfo)
en System.Linq.Enumerable.WhereSelectArrayIterator ` 2.MoveNext()
en System.Linq.Buffer ` 1..ctor (IEnumerable ` 1 fuente)
en Sistema .Linq.Enumerable.ToArray [TSource] (IEnumerable ` 1 fuente)
en Ninject.Components.ComponentContainer.CreateNewInstance (componente Tipo, implementación Type)
en Ninject.Components.ComponentContainer.ResolveInstance (componente Tipo, implementación Type)
en Ninject.Components.ComponentContainer.Get (componente Tipo)
en Ninject.Components.ComponentContainer.GetT
en Ninject.KernelBase.CreateContext (petición IRequest, IBinding vinculante)
en Ninject.KernelBase. < > c _ _ DisplayClassa. <Resolver> b _ _ 6 (enlace IBinding)
en System.Linq.Enumerable. < > c _ _ DisplayClass12 ` 3. <CombineSelectors> b _ _ 11 (TSource x)
en System.Linq.Enumerable.WhereSelectEnumerableIterator ` 2.MoveNext()
en System.Linq.Enumerable. <CastIterator> d _ _ aa ` 1.MoveNext()
en System.Linq.Enumerable.Single [TSource] (IEnumerable ` 1 fuente)
en Ninject.ResolutionExtensions.Obtener [T] (raíz IResolutionRoot, IParameter [] parámetros)
en NameOfConsumingSite .Application _ BeginRequest (Object sender, EventArgs e) ...

La excepción no son lanzados si quito el OnePerRequestModule item from httpModules en web.config, pero eso está agregando un ton de sobrecarga.

Agradezco a todos por adelantado si pueden ayudar!

+0

¿Algo interesante acerca de sus enlaces? ¿O es una pila de autoenlaces de clase implícitos? En principio, esto obviamente debería funcionar. ¿Tienes la versión troncal o tienes algún binario? –

+0

Nada elegante, son las mismas fijaciones que funcionaron sin problemas en v1.5. Además, estoy usando el binario actual. Sean Chambers, del grupo Ninject Google, sugiere que OnePerRequestModule está en desuso, ya que los métodos InXxxxScope manejan esa responsabilidad. Lo que queda sin respuesta es por qué OnePerRequestModule aún está incluido en la solución Ninject. También me pregunto si esto puede ser causado por una condición de carrera con GarbageCollectionCachePruner. – reifnir

Respuesta

3

Hubo un problema de subprocesamiento múltiple. Intente utilizar el 2.2 RC1 encontrado en https://github.com/ninject. Dígame si este problema aún ocurre con esta versión para asegurarse de que no tengamos más problemas que solucionar antes de la publicación.

+1

El problema específico se describe (con pasos para reproducir) aquí: https://github.com/ninject/ninject/issues/closed#issue/17. Se arregló en la versión 2.1.0.70. –

Cuestiones relacionadas