2010-10-01 34 views
6

Tôi vừa nâng cấp triển khai Ninject hiện có từ 1,5 lên 2.0. Tôi hiện đang nhìn thấy một ngoại lệ liên tục bị ném khi nhiều yêu cầu đang diễn ra trong một khoảng thời gian ngắn.Ngoại lệ gián đoạn Ninject liên quan đến OnePerRequestModule

Đây là ngoại lệ đang được ném.

Loại: System.ArgumentException
nhắn: Một mục với cùng một chìa khóa đã được thêm vào.
Nguồn: Ninject
Stack Trace: tại System.ThrowHelper.ThrowArgumentException (nguồn ExceptionResource)
tại System.Collections.Generic.Dictionary ` 2.Insert (key TKey, giá trị TValue, Boolean add)
tại System.Collections.Generic.Dictionary ` 2.Thêm (khóa TKey, giá trị truyền hình)
tại Ninject.Components.ComponentContainer.CreateNewInstance (Loại thành phần, Loại triển khai)
tại Ninject.Components.ComponentContainer.ResolveInstance (Type component, Loại triển khai)
tại Ninject.Components.ComponentContainer.Get (Loại thành phần)
tại Ninject.Components.ComponentContainer. <CreateNewInstance> b _ _ 6 (ParameterInfo tham số)
tại System.Linq.Enumerable.WhereSelectArrayIterator ` 2.MoveNext()
tại System.Linq.Buffer ` 1..ctor (IEnumerable ` 1 nguồn)
tại hệ thống .Linq.Enumerable.ToArray [TSource] (IEnumerable ` 1 nguồn)
tại Ninject.Components.ComponentContainer.CreateNewInstance (Type thành phần, Type thực hiện)
tại Ninject.Components.ComponentContainer.ResolveInstance (Type thành phần, Type thực hiện)
tại Ninject.Components.ComponentContainer.Get (Type thành phần)
tại Ninject.Components.ComponentContainer.GetT
tại Ninject.KernelBase.CreateContext (yêu cầu IRequest, IBinding ràng buộc)
tại Ninject.KernelBase. < > c _ _ DisplayClassa. < Giải quyết > b _ _ 6 (Ràng buộc ràng buộc)
tại System.Linq.Enumerable. < > c _ _ DisplayClass12 ` 3. <CombineSelectors> b _ _ 11 (TSource x)
tại System.Linq.Enumerable.WhereSelectEnumerableIterator ` 2.MoveNext()
tại System.Linq.Enumerable. <CastIterator> d _ _ aa ` 1.MoveNext()
tại System.Linq.Enumerable.Single [TSource] (IEnumerable nguồn ` 1)
tại Ninject.ResolutionExtensions.Nhận [T] (IResolutionRoot gốc, IParameter [] thông số)
tại NameOfConsumingSite .Application _ BeginRequest (Object sender, EventArgs e) ...

Trường hợp ngoại lệ không được ném nếu tôi loại bỏ các OnePerRequestModule mục từ httpModules trong web.config, nhưng đó là thêm tấn phí.

Tôi cảm ơn mọi người trước nếu họ có thể trợ giúp!

+0

Bất kỳ điều gì thú vị về các ràng buộc của bạn? Hoặc là nó là một đống các ràng buộc tự ẩn lớp? Về nguyên tắc, điều này rõ ràng chỉ nên hoạt động. Bạn có phiên bản thân cây hoặc bạn có một số nhị phân? –

+0

Không có gì lạ mắt, chúng là những ràng buộc tương tự đã hoạt động hoàn hảo trong v1.5. Ngoài ra, tôi đang sử dụng nhị phân hiện tại. Sean Chambers từ Nhóm Google Ninject cho rằng OnePerRequestModule không được chấp nhận vì các phương thức InXxxxScope xử lý trách nhiệm đó. Những gì còn lại chưa được trả lời là lý do tại sao OnePerRequestModule vẫn được bao gồm trong giải pháp Ninject. Tôi cũng tự hỏi nếu điều này có thể được gây ra bởi một tình trạng đua với GarbageCollectionCachePruner. – reifnir

Trả lời

3

Đã xảy ra sự cố đa luồng. Hãy thử sử dụng 2.2 RC1 được tìm thấy tại https://github.com/ninject. Vui lòng cho tôi biết nếu sự cố này vẫn xảy ra với phiên bản này để đảm bảo chúng tôi không gặp vấn đề gì nữa mà chúng tôi phải khắc phục trước khi phát hành.

+1

Vấn đề cụ thể được mô tả (với các bước để tái tạo) tại đây: https://github.com/ninject/ninject/issues/closed#issue/17. Nó đã được sửa trong phiên bản 2.1.0.70. –

Các vấn đề liên quan