Я использую quartz.net для планирования регулярных событий в приложении asp.net mvc.
Запланированное задание должно вызывать сервисный уровень script, для которого требуется экземпляр UrlHelper (для создания Urls на основе правильных маршрутов (via urlHelper.Action(..)
), содержащихся в сообщениях электронной почты, которые будут отправлены службой).
Я не хочу жестко кодировать ссылки в сообщениях электронной почты - они должны быть разрешены с помощью urlhelper.
Задача:
public class EvaluateRequestsJob : Quartz.IJob
{
public void Execute(JobExecutionContext context)
{
// where to get a usable urlHelper instance?
ServiceFactory.GetRequestService(urlHelper).RunEvaluation();
}
}
Обратите внимание, что это не выполняется в конвейере MVC. Отсутствует текущий запрос, код запускается планировщиком Quartz в определенные моменты времени.
Как получить экземпляр UrlHelper, который можно использовать в указанном месте?
Если невозможно построить UrlHelper, другой вариант, который я вижу, - сделать задание "самозвоноком" действием контроллера, выполнив HTTP-запрос - при выполнении действия у меня, конечно, будет доступный экземпляр UrlHelper - но это кажется мне немного взломанным.