2017-02-06 16 views
4

У меня есть serivce, у которого есть некоторый метод, который я хотел бы быть Периодической работой.Повторяющиеся задания с Hangfire и Asp.Net Core

Я знаю, что я могу использовать замедленное воспламенение в моем Startup.cs: например

RecurringJob.AddOrUpdate(() => Console.WriteLine("I'm a recurring job"), Cron.Minutely); 

Но вопрос в том, как я могу использовать мои услуги здесь? Должен ли я как-то использовать (инъекция зависимостей?) Или в другом месте?

Возможно, мне нужно добавить некоторые значения cron в appsettings.json?

+0

'RecurringJob.AddOrUpdate ("MyMethodNameAsID",() => Class.Method(), Cron.Minutely);' Я думаю, что будет работать ... Может быть. Если я правильно понял ваш вопрос. – NooGuy

+0

-------------------------------------- –

+0

@NooGuy Да, это работает, но insted of этот код я хотел бы использовать мой сервис – Cieja

ответ

0

Недостатком фальсификатора, который я использовал, была сложность в его настройке. Для его работы требуется несколько дополнительных таблиц. Надеюсь, у вас есть таблицы, созданные для него в вашей базе данных. Pls видит это, как получить повторяющиеся задания. HangFire recurring task data. Я чувствую, что это очень хорошо для работы в очередях или для фоновых задач, но для повторяющихся заданий, Я бы предложил пойти за Quartz.net. Он не нуждается в такой настройке и очень легко интегрируется. На данный момент проблем нет, и у него хорошая поддержка CRON. Пример: https://www.mikesdotnetting.com/article/254/scheduled-tasks-in-asp-net-with-quartz-net

+0

Да, но я хотел бы использовать hangfire, и я ищу решение, как я могу это сделать. – Cieja

2

Вы имеете в виду что-то вроде этого?

RecurringJob.AddOrUpdate<IAlertService>(x => 
    x.SendAlerts(emailSettings, link), Cron.MinuteInterval(1)); 
0

Я год в конце этой партии, и наткнулся на этот вопрос, пока искал что-то замедленное воспламенение связаны, понял, я бы ответил, как нет ответа на вопрос, спрашивают.

Вы абсолютно можете использовать Injection Dependency в Hangfire без необходимости полагаться на конструкторы по умолчанию или создавать экземпляры в своем классе.

Вы можете наследовать от JobActivator и переопределить метод ActivateJob(Type), в то время как ваша пользовательская реализация использует IServiceProvider.

public class DependencyJobActivator : JobActivator 
{ 
    private readonly IServiceProvider _serviceProvider; 

    public DependencyJobActivator(IServiceProvider serviceProvider) 
    { 
     _serviceProvider = serviceProvider; 
    } 

    public override object ActivateJob(Type jobType) { 
     return _serviceProvider.GetService(jobType); 
    } 
} 

Тогда просто скажите замедленное воспламенение использовать пользовательскую реализацию в классе запуска Configure метода.

public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider) 
{ 
    app.UseHangfireDashboard(); 
    app.UseHangfireServer(new BackgroundJobServerOptions { Activator = new DependencyJobActivator(serviceProvider) }); 
    app.UseMvc(); 
} 

Подробнее здесь на Hangfire Documentation