Tôi vẫn chưa quen với Inversion of Control (mặc dù bây giờ tôi đang học về nó) nên nếu đó là giải pháp cho câu hỏi của tôi, hãy cho tôi biết và tôi sẽ nhận được quay lại tìm hiểu về nó.ASP.NET MVC - Chia sẻ trạng thái phiên giữa các bộ điều khiển
Tôi có một bộ điều khiển cần biến Session, tự nhiên không có gì quá đặc biệt xảy ra vì Session hoạt động như thế nào ở vị trí đầu tiên, nhưng điều này khiến tôi tự hỏi cách nào để chia sẻ các đối tượng liên quan giữa hai bộ điều khiển riêng biệt Là. Trong kịch bản cụ thể của tôi, tôi có một UploadController và một ProductController mà làm việc cùng với nhau để tải lên các tập tin hình ảnh. Vì các tệp được tải lên bởi tệp UploadController, dữ liệu về tải lên được lưu trữ trong Phiên. Sau khi điều này xảy ra, tôi cần truy cập dữ liệu Session đó trong ProductController. Nếu tôi tạo thuộc tính get/set cho biến Session chứa thông tin tải lên của tôi trong cả hai bộ điều khiển, tôi sẽ có thể truy cập dữ liệu đó, nhưng đồng thời tôi sẽ vi phạm tất cả các loại DRY, chưa kể đến việc tạo, ở thiết kế tốt nhất, khó hiểu, nơi một đối tượng được chia sẻ và sửa đổi bởi hai đối tượng hoàn toàn bị ngắt kết nối.
Bạn đề xuất điều gì?
Bối cảnh chính xác:
Một tập tin tải lên Xem bài viết một tập tin vào UploadController.ImageWithpreview(), sau đó đọc trong file gửi và sao chép nó vào thư mục tạm thời. Sau khi lưu tệp, một lớp khác sẽ tạo hình thu nhỏ của hình ảnh đã tải lên. Đường dẫn tới cả tệp gốc và hình thu nhỏ được tạo ra sau đó được trả về với một JsonResult đến một cuộc gọi lại javascript để cập nhật một số nội dung động trong một biểu mẫu trên trang có thể là "Đã lưu" hoặc "Đã hủy". Cho dù hình ảnh được tải lên được lưu hay nó bị bỏ qua, tôi cần phải di chuyển hoặc xóa cả ảnh và hình thu nhỏ được tạo ra từ thư mục tạm thời. Để tạo điều kiện thuận lợi cho việc này, UploadController theo dõi tất cả các tệp tải lên và hình thu nhỏ của chúng trong đối tượng Queue được duy trì trong phiên.
Quay lại chế độ xem: sau khi biểu mẫu được tạo bằng hình thu nhỏ được tạo lên, biểu mẫu đăng lại ProductController nơi tệp được chọn được xác định (hiện tại tôi lưu trữ tên tệp trong trường Ẩn, Tôi nhận ra là một lỗ hổng khủng khiếp), và sau đó sao chép ra khỏi thư mục tạm thời đến một vị trí cố định. Lý tưởng nhất, tôi muốn chỉ đơn giản là truy cập vào hàng đợi tôi đã lưu trữ trong phiên để các hình thức không cần phải chứa vị trí hình ảnh như nó hiện nay. Đây là cách tôi đã hình dung ra giải pháp của mình, nhưng tôi sẽ háo hức lắng nghe bất kỳ bình luận hay phê bình nào.
Cảm ơn bạn đầu vào này. Tôi đã thêm một số thông tin thêm vào câu hỏi ban đầu của tôi nếu đó là bất kỳ sử dụng thêm. –
Việc xử lý hình ảnh là thời gian thực, nhưng tồn tại bên trong một khu vực quản trị để trang web, do đó, việc sử dụng tổng thể của nó là khá tối thiểu. Tối đa, chỉ một vài hình ảnh có khả năng được xử lý mỗi giờ trên toàn bộ ứng dụng. Một cách tiếp cận khác mà tôi cũng xem xét đơn giản là có sự kiện Session_End của ứng dụng xóa toàn bộ thư mục tạm thời cho phiên hiện tại, nhưng tôi không chắc là lý tưởng đó là như thế nào. –
Nếu người dùng của bạn đã tải lên rất nhiều hình ảnh đang xử lý, tôi không nghĩ rằng bạn có thể đảm bảo rằng nó sẽ được thực hiện khi phiên của họ hết hạn. Tôi sẽ xóa nó sau khi "xử lý" đã hoàn thành. Các luồng công nhân (s) nên được duy trì miễn là hàng đợi có các mục cần xử lý để an toàn để giả định điều đó. Miễn là hồ bơi ứng dụng của bạn không "ngủ", hệ thống của bạn sẽ tiếp tục xử lý ok. Khá chắc chắn nó được đề cập trong bài báo tôi đã liên kết. – andymeadows