Quartz i Ninject

Hej,

Dziś miałem okazję po raz kolejny użyć Quartz .NET. Dlatego też postanowiłem napisać nowego posta na temat wstrzykiwania zależności w job’ach.

Pewnie niesamowicie spłycając:

Quartz jest to system planowania zadań który umożliwia łatwe tworzenie własnych zadań o ustalonej porze.

Kiedy pierwszy raz usłyszałem o tej bibliotece byłem pełen obaw o to czy to rzeczywiście działa jak należy. Po instalacji i przetestowaniu pierwszych „Jobów” byłem już dobrych myśli. Postanowiliśmy użyć tej biblioteki w naszym projekcie i zastępowaliśmy nasze joby Quartzowymi. Prawie na samym początku okazało się, że może być problem z wstrzykiwaniem zależności w konstruktory tych jobów.

Znalazłem wtedy paczkę Ninject.Extensions.Quartz – nie ufajcie jej  działało, ale po zaktualizowaniu w  projekcie Ninject do nowszej wersji – przestało.

To co robi rozszerzenie to rejestracja modułu QuartzNinjectModule w Ninject. Można zrobić to samemu i przechowywać te klasy w projekcie.

Rejestracja modułu w Ninject:

Budowa modułu QuartzNinjectModule:

W module korzystamy z fabryki planera którą musimy sobie sami stworzyć:

I ostatnią klasą jaką musimy dodać do projektu to NinjectJobFactory:

Po dodaniu tych klas do projektu, nasz HelloJob mający w konstruktorze zależność będzie działać o ile poprawnie zainicjujemy Scheduler.

Z reguły tworzę sobie klasę pomocniczą o nazwie JobScheduler którego konstruktor wygląda w ten sposób:

Poza rejestracją jobów umożliwiam uruchomienie IScheduler:

I ostatnią rzeczą jaką robię to uruchomienie schedulera – JobScheduler stworzonego w naszym IoC.