2010-10-01 5 views
6

Je viens de mettre à jour une implémentation existante de Ninject de 1.5 à 2.0. Je vois maintenant une exception intermittente se produire lorsque de nombreuses demandes se produisent dans un court laps de temps.Ninject Exception intermittente levée liée à OnePerRequestModule

Voici l'exception en cours de levée.

Type: System.ArgumentException
Message: Un élément avec la même clé a déjà été ajouté.
Source: Ninject
Stack Trace: à System.ThrowHelper.ThrowArgumentException (ressource ExceptionResource)
à System.Collections.Generic.Dictionary ` 2.Insérez (touche TKey, TValue valeur, add Boolean)
à System.Collections.Generic.Dictionary ` 2.Ajoutez (touche TKey, TValue valeur)
à Ninject.Components.ComponentContainer.CreateNewInstance (composant de type, la mise en œuvre de type)
à Ninject.Components.ComponentContainer.ResolveInstance (composant de type, Type de mise en œuvre)
à Ninject.Components.ComponentContainer.Get (composant Type)
à Ninject.Components.ComponentContainer. <CreateNewInstance> b _ _ 6 (paramètre ParameterInfo)
à System.Linq.Enumerable.WhereSelectArrayIterator ` 2.MoveNext()
à System.Linq.Buffer ` 1..ctor (IEnumerable ` une source)
au système .Linq.Enumerable.ToArray [TSource] (IEnumerable ` une source)
à Ninject.Components.ComponentContainer.CreateNewInstance (composante de type, la mise en œuvre de type)
à Ninject.Components.ComponentContainer.ResolveInstance (composante de type, la mise en œuvre de type)
à Ninject.Components.ComponentContainer.Get (composant de type)

à Ninject.Components.ComponentContainer.GetT à Ninject.KernelBase.CreateContext (requête IRequest, IBinding liaison)
à Ninject.KernelBase. < > c _ _ AffichageClasse. < Résolvez > b _ _ 6 (liaison de liaison)
à 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 ` une source)
à Ninject.ResolutionExtensions.Obtenir [T] (IResolutionRoot racine, iParamètre [] paramètres)
à NameOfConsumingSite .Application _ BeginRequest (Object sender, EventArgs e) ...

L'exception ne soit pas levée si je retire la OnePerRequestModule article de httpModules dans web.config, mais cela ajoute un tonne de frais généraux.

Je remercie quiconque d'avance s'ils peuvent vous aider!

+0

Quelque chose d'intéressant à propos de vos fixations? Ou est-ce une pile de liaisons auto implicites de classe? En principe, cela devrait évidemment fonctionner. Avez-vous la version trunk ou avez-vous un binaire? –

+0

Rien d'extraordinaire, ce sont les mêmes liaisons qui ont fonctionné parfaitement dans la version 1.5. En outre, j'utilise le binaire actuel. Sean Chambers du groupe Google Ninject suggère que OnePerRequestModule est obsolète car les méthodes InXxxxScope gèrent cette responsabilité. Ce qui reste sans réponse est pourquoi OnePerRequestModule est toujours inclus dans la solution Ninject. Je me demande aussi si cela peut être causé par une condition de course avec GarbageCollectionCachePruner. – reifnir

Répondre

3

Il y avait un problème de multithreading. Essayez d'utiliser le 2.2 RC1 trouvé au https://github.com/ninject. S'il vous plaît dites-moi si ce problème se produit toujours avec cette version pour s'assurer que nous n'avons aucun autre problème que nous devons corriger avant la publication.

+1

Le problème spécifique est décrit (avec les étapes à reproduire) ici: https://github.com/ninject/ninject/issues/closed#issue/17. Il a été corrigé dans la version 2.1.0.70. –

Questions connexes