Я использую quartz.net для планирования регулярных событий в приложении asp.net mvc.
Запланированное задание должно вызывать сценарий уровня обслуживания, для которого требуется экземпляр UrlHelper (для создания URL-адресов на основе правильных маршрутов (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, - но это кажетсянемного хакерский для меня.