2010-10-01 2 views
6

Я только что обновил существующую реализацию Ninject с 1.5 до 2.0. Теперь я вижу прерывистое исключение, возникающее, когда многие запросы происходят за короткий промежуток времени.Ninject Прерывистое исключение, связанное с OnePerRequestModule

Вот исключение, которое бросает.

Тип: System.ArgumentException
Сообщение: Элемент с тем же ключом уже был добавлен.
Источник: Ninject
Трассировка стека: на System.ThrowHelper.ThrowArgumentException (ExceptionResource ресурсов)
на System.Collections.Generic.Dictionary ` 2.Insert (TKey ключ, значение TValue, логическое сложение)
на System.Collections.Generic.Dictionary ` 2.Add (ключ TKey, TValue значения)
в Ninject.Components.ComponentContainer.CreateNewInstance (тип компонент, тип реализация)
в Ninject.Components.ComponentContainer.ResolveInstance (тип компонент, Тип реализации)
у Ninject.Components.ComponentContainer.Get (компонент типа)
у Ninject.Components.ComponentContainer. <CreateNewInstance> б _ _ 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. < Реабилитация > b _ _ 6 (Связывание с IBinding)
at System.Linq.Enumerable. < > гр _ _ DisplayClass12 ` 3. <CombineSelectors> б _ _ 11 (TSource х)
на System.Linq.Enumerable.WhereSelectEnumerableIterator ` 2.MoveNext()
на System.Linq.Enumerable. <CastIterator> д _ _ аа ` 1.MoveNext()
на System.Linq.Enumerable.Single [TSource] (IEnumerable ` 1 источника)
на Ninject.ResolutionExtensions.Получить [T] (IResolutionRoot корень, IParameter [] параметры)
в NameOfConsumingSite .Application _ BeginRequest (отправитель объекта, EventArgs е) ...

Исключение не вышвырнут, если я удалить OnePerRequestModule item from httpModules в web.config, но это добавляет тонна накладных расходов.

Я благодарю всех заблаговременно, если они могут помочь!

+0

Что-нибудь интересное о ваших привязках? Или это стек неявных самообучений класса? В принципе, это, очевидно, должно просто работать. У вас есть версия багажника или у вас есть двоичный файл? –

+0

Ничего особенного, это те же привязки, которые безупречно работали в версии 1.5. Кроме того, я использую текущий двоичный файл. Шон Чамберс из группы Ninject Google Group предполагает, что OnePerRequestModule устарел, поскольку методы InXxxxScope обрабатывают эту ответственность. Остается без ответа, почему OnePerRequestModule все еще включен в решение Ninject. Я также задаюсь вопросом, может ли это быть вызвано гоночным состоянием с GarbageCollectionCachePruner. – reifnir

ответ

3

Возникла проблема многопоточности. Попробуйте использовать 2.2 RC1, найденный по адресу https://github.com/ninject. Скажите, пожалуйста, если эта проблема по-прежнему возникает с этой версией, чтобы убедиться, что у нас нет дополнительной проблемы, которую мы должны исправить до выпуска.

+1

Конкретная проблема описана здесь (с шагами для воспроизведения): https://github.com/ninject/ninject/issues/closed#issue/17. Это было исправлено в версии 2.1.0.70. –