2011-01-03 41 views
6

Tôi có dịch vụ windows với Quartz.Net được nhúng nhưng dường như không tìm được cách nào để tạo một tham chiếu đến một đối tượng được ... Tìm hiểu thêm một số đối tượng để ghi nhật ký, truy cập cơ sở dữ liệu và các mục đích khác vì vậy tôi muốn các công việc Quartz.Net của tôi sử dụng các đối tượng đã được khởi tạo này thay vì tạo ra các cá thể riêng của các đối tượng này. Tuy nhiên, các công việc Quartz.Net được khởi tạo bởi bộ lập lịch bằng cách sử dụng hàm tạo không có đối số và do đó không có cách nào để chuyển một tham chiếu bằng cách sử dụng hàm tạo.Làm thế nào để tạo một tham chiếu đến một đối tượng instantiated trong một công việc Quartz.Net?

Tôi có phải tự mình triển khai JobFactory và đó là cách duy nhất để đạt được điều này?

Trả lời

1

Ngữ cảnh khác nhau (Linux/JAVA), nhưng tạo Nhà máy của riêng bạn kế thừa từ cột thạch anh. Ghi đè phương thức "createScheduler". Gọi phương thức siêu, lưu dụ trong bản đồ băm (đồng bộ) tĩnh. Viết phương thức tĩnh để có thể hiện theo tên.

2

Bạn có thể thêm cặp khóa-giá trị của đối tượng trong jobDetail.JobDataMap và truy xuất chúng from(JobExecutionContext) context.JobDetail.JobDataMap.

+0

website thạch anh nói "chỉ lưu trữ nguyên thủy các loại dữ liệu (bao gồm Strings) Trong JobDataMap" - http://www.quartz-scheduler.org/documentation/best-practices – TruthOf42

3

Tôi nghĩ cách tiếp cận phù hợp với tình huống này là sử dụng job listener. Bạn có thể tạo công việc "giả" mà không làm gì cả và người nghe phát hiện khi công việc đã được chạy. Bạn có thể khởi tạo trình nghe với các tham chiếu đến bất kỳ phụ thuộc nào, miễn là chúng có sẵn tại thời điểm bạn thiết lập lập lịch công việc.

IJobDetail job = JobBuilder.Create<DummyJob>() 
      .WithIdentity("job1") 
      .Build(); 

     ITrigger trigger = TriggerBuilder.Create() 
      .WithIdentity("trigger1") 
      .StartNow() 
      .WithSimpleSchedule(x => x 
       .WithInterval(interval) 
       .RepeatForever()) 
      .Build(); 

     _scheduler.ScheduleJob(job, trigger); 

     MyJobListener myJobListener = new MyJobListener (dependency1, dependency2); 

     _scheduler.ListenerManager.AddJobListener(myJobListener, KeyMatcher<JobKey>.KeyEquals(new JobKey("job1"))); 
+0

Tôi đồng ý với bạn, cũng như tài liệu liên kết của bạn "công việc nghe" trỏ đến. Tôi đã có cùng một vấn đề như Dean và Google đã gửi cho tôi ở đây - Tôi thích giải pháp của bạn hơn một lựa chọn và đã thực hiện nó cho phù hợp. – roadkill

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