Có ai có bất kỳ trải nghiệm nào tích hợp autofac và Quartz.Net? Nếu vậy, đâu là tốt nhất để kiểm soát quản lý suốt đời - IJobFactory, trong Thi hành IJob, hoặc thông qua người nghe sự kiện?Tích hợp Autofac và Quartz.Net
Ngay bây giờ, tôi đang sử dụng một autofac tùy chỉnh IJobFactory
để tạo ra các IJob
trường hợp, nhưng tôi không có một cách dễ dàng để cắm vào một ILifetimeScope
trong IJobFactory để đảm bảo bất kỳ tài nguyên đắt tiền được tiêm trong IJob được dọn dẹp. Nhà máy công việc chỉ tạo ra một thể hiện của một công việc và trả về nó. Dưới đây là những ý tưởng hiện tại của tôi (hy vọng có những cái tốt hơn ...)
Dường như hầu hết tích hợp AutoFac bằng cách nào đó quấn một
ILifetimeScope
xung quanh đơn vị của công việc họ tạo ra. Cách bạo lực rõ ràng dường như là để vượt qua mộtILifetimeScope
vàoIJob
và có phương phápExecute
tạo ra một đứa trẻILifetimeScope
và khởi tạo bất kỳ phụ thuộc ở đó. Điều này có vẻ hơi quá gần với một mô hình định vị dịch vụ, do đó dường như đi ngược lại tinh thần của autofac, nhưng nó có thể là cách rõ ràng nhất để đảm bảo xử lý thích hợp một phạm vi.Tôi có thể cắm vào một số sự kiện Quartz để xử lý các giai đoạn khác nhau của ngăn xếp Thực hiện công việc và xử lý quản lý lâu dài ở đó. Điều đó có lẽ sẽ có nhiều công việc hơn, nhưng có thể đáng giá nếu nó tách biệt các mối quan tâm.
Đảm bảo rằng IJob là một trình bao bọc đơn giản xung quanh loại
IServiceComponent
, sẽ thực hiện tất cả công việc và yêu cầu nó làOwned<T>
hoặcFunc<Owned<T>>
. Tôi thích làm thế nào điều này dường như rung cảm hơn với autofac, nhưng tôi không thích rằng nó không thực thi nghiêm chỉnh cho tất cả những người triển khai IJob.
cảm ơn bạn đã dành thời gian trả lời. Tôi thích ý tưởng ở chỗ nó là một phiên bản rõ ràng hơn về động não thứ ba của tôi trong câu hỏi ban đầu.Những gì vẫn còn lỗi tôi là tôi không kiểm soát được phạm vi cả đời. Về cơ bản, tôi muốn chạy mỗi IJob trong 'LifetimeScope' của chính nó, gần như tương đương với một cuộc gọi dịch vụ WCF. Thạch anh 'IJobFactory' không may là khá nhiều lửa và quên đi những gì tôi có thể nói, vì vậy có thể là nếu tôi thực sự muốn ranh giới phạm vi rõ ràng, tôi phải đào sâu vào hệ thống nghe Quartz. –
@dfaivre - Tôi đã sửa lỗi trong mã của mình, tôi đã quên phần 'ownedJob.Value'. Có lẽ ý định của tôi rõ ràng hơn bây giờ. –
Tôi không biết rằng Owned đã tạo phạm vi; rất hữu dụng. Tôi nghĩ rằng đây có lẽ là cách tiếp cận thẳng tiến nhất sau đó mà không cần phải đi sâu vào ngăn xếp Quartz. Có lẽ tôi sẽ tăng thêm 'IJobFactory' của mình để ném nếu công việc không thuộc loại 'JobWrapper <>' (chỉ vì vậy tôi ngủ ngon hơn một chút vào ban đêm ...). Cảm ơn một lần nữa vì cái nhìn sâu sắc tuyệt vời. –