In my system I have all kinds of “tasks”. They are basically classes which implement an interface, called ITask which looks like this:

public interface ITask
{
void Run();
}

If the tasks need additional configuration, they can have public properties which the system exposes to the user when the task is being configured, so the user gets a UI where he can populate the properties of the task.

The task config is then persisted to my database along with a dictionary representing all the public properties and their values. Then I have a factory method that can create instances of these tasks and populate all the stored properties, by reading the config from the database. What I end up with is an instance of the task implementation with all the public properties populated correctly. Essentially just the same as doing this in code:

var recurringTask = new TestTask() { TextToDisplay = “Foobar” };

How can I schedule a RecurringJob in Hangfire to take this recurringTask instance (with all public properties populated) and call the Run() method on it?