[OR] Làm thế nào để xác định một chu kỳ sống StructureMap cho UOW được tiêu thụ bởi các yêu cầu http và việc làm thạch anhStructureMap trả về một đối tượng session nHibenrate thanh lý khoản từ chủ đề local scope
Tôi có ứng dụng web này trong đó sử dụng SM cho IoC. Tôi đang sử dụng HybridHttpOrThreadLocalScoped phạm vi để lưu trữ các đối tượng ISH nHibernate của tôi. Điều này làm việc ok trong một phiên cho mỗi yêu cầu thời trang cho các yêu cầu web của tôi.
Nhưng tôi cũng có quartz.net để lên lịch cho một vài công việc. Công việc này sử dụng cùng một đơn vị công việc để có được đối tượng ISession. Trong trường hợp này khi trình lên lịch bắt đầu công việc, mọi thứ hoạt động tốt lúc đầu và công việc chạy tốt cho vài lần UNTIL id công việc được lặp lại.
Hãy tưởng tượng rằng khi công việc được lên lịch, nó bắt đầu chạy trong các chủ đề có id 11, 12, 13 và sau đó với chuỗi id 11 một lần nữa. Tại thời điểm này structuremap trả về một đối tượng session đã được xử lý và tôi nhận được "System.ObjectDisposedException: Session bị đóng!" lỗi. Vì vậy, từ những gì tôi có thể nhìn thấy, phiên được giữ trong lưu trữ cục bộ luồng và sau khi tôi bỏ phiên vào cuối đơn vị công việc của tôi, đối tượng phiên vẫn được giữ trong bộ nhớ cục bộ của luồng. Dường như sau khi chủ đề chấm dứt lưu trữ cục bộ của nó không bị xóa và bằng cách nào đó khi một chuỗi mới có cùng id được tạo, structuremap tìm kiếm phiên trong lưu trữ cục bộ cũ thread (được cho là xóa cho chuỗi mới) Tôi tin) và trả về đối tượng phiên đã được xử lý.
Câu hỏi:
- Có cách nào để xóa thread lưu trữ địa phương (về việc chấm dứt)?
- Có tương đương với "ReleaseAndDisposeAllHttpScopedObjects" cho các đối tượng có phạm vi chuỗi không?
- Có cách nào để vô hiệu hóa (hoặc đẩy ra) đối tượng được xử lý để ngay cả khi SM tìm kiếm nó thì nó sẽ không tìm thấy bất kỳ và phải tạo một cá thể mới?
Tôi hy vọng tôi đã làm rõ câu hỏi của mình. Điều này đã mất vài giờ thời gian của tôi và vẫn còn tôi đã không tìm thấy một cách xung quanh nó. Tôi đánh giá cao bất kỳ gợi ý:>
Cập nhật: tôi đã thêm giải pháp của riêng mình để thực hiện một UOW phục vụ bởi việc StructureMap với cả hai yêu cầu http và việc làm thạch anh. Hãy cho tôi biết nếu bạn có giải pháp tốt hơn/dễ dàng hơn/đơn giản hơn.
Bạn có đang quản lý các IJob thạch anh của mình với StructureMap không? –
@Mauricio: Tôi đang sử dụng StructureMap trong ứng dụng của mình. Tôi không chắc chắn những gì bạn có nghĩa là bằng cách quản lý công việc thạch anh bởi StructeMap mặc dù:> – kaptan
là trường hợp thạch anh IJob của bạn được quản lý bởi StructureMap? Nói cách khác: bạn có đăng ký công việc của bạn trong container? –