2011-08-02 11 views
34

Có một số câu hỏi liên quan đến phiên bản mới nhất (2.2.1.4) trong số ninject.Ninject InRequestScope mất tích

Được cố gắng để Bind một Linq2Sql DataContext đến một thực hiện cụ thể InRequestScope (trong một dự án thư viện lớp)

Bind<DataContext>().To<MoneywatchDataContext>() 

nhưng không thể tìm InRequestScope phương pháp

enter image description here

đã kết thúc làm điều này,

Bind<DataContext>().To<MoneywatchDataContext>().InScope(ctx => HttpContext.Current) 

Chỉ muốn tìm hiểu xem:

  1. Nếu điều này sẽ hoạt động chính xác như phương pháp InRequestScope.
  2. Điều đó sẽ đảm bảo rằng khi HTTContext.Current của mình được GC'ed, cơ sở DataCotext cũng sẽ được xử lý.

Trả lời

22

Rất có thể bạn tham chiếu không có phiên bản web nào của Ninject. Thay thế nó bằng phiên bản bình thường và bạn sẽ có phương pháp mở rộng InRequestScope.

45

InRequestScope có sẵn dưới dạng phương thức mở rộng trong Ninject.Web.Common. Vì vậy, nếu cài đặt trước đó thông qua Nuget (gói Ninject) bây giờ chúng tôi có thể cần phải cài đặt gói nuget bổ sung Ninject.Web.Common

+0

Hãy nhớ rằng bạn cần cài đặt gói này vào dự án lớp mô-đun của bạn đang được cấu hình. Tôi đã có một vấn đề trong đó tôi đã cài đặt nó trong dự án MVC nhưng module mà tôi đặt 'Bind <>() .Đến <>(). InRequestScope();' là trong dự án hạ tầng. Tôi đã cho tôi một thời gian để nhận ra điều đó. – fabriciorissetto

31
using Ninject.Web.Common; // that's most likely all you need 
+5

Đây là câu trả lời thực sự đã giúp tôi. –

+0

Làm việc cho tôi. – orourkedd

+0

(điều này sẽ nhập không gian tên chứa phương thức mở rộng) –