3

I am using Hangfire 1.6.4 for my .NET Core project.

Here is my Schedule controller:

    [HttpPost]
    public void Post([FromBody]EmailSchedulerDto emailSchedulerDto)
    {
        // test only
        emailSchedulerDto = new EmailSchedulerDto
        {
            UserId = "",
            Email = "myEmail@gmail.com",
            StoresId = new List<string>(),
            CronPattern = "* * * * *"
        };
        RecurringJob.AddOrUpdate(
            () =>
                _emailScheduler.ScheduleEmail(emailSchedulerDto.UserId, emailSchedulerDto.Email,
                    emailSchedulerDto.StoresId), emailSchedulerDto.CronPattern);
    }

But I have an error during job execution:

// Job ID: #183
using MyProject.Services.Email;

var emailScheduler = Activate<EmailScheduler>();
await emailScheduler.ScheduleEmail(
    "",
    "myEmail@gmail.com",
    FromJson<IEnumerable`1>("[]")
storesId
);

System.InvalidOperationException

No service for type 'MyProject.Services.Email.EmailScheduler' has been registered.

I've already registered ContainerJobActivator like this:

public class ContainerJobActivator : JobActivator
{
    private readonly IServiceProvider _serviceProvider;

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

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

And in Startup class:

GlobalConfiguration.Configuration.UseActivator(new ContainerJobActivator(services.BuildServiceProvider()));

Whats wrong?

Thank you!

Oleg
  • 1,467
  • 4
  • 26
  • 39
  • related answer [Hangfire dependency injection with .net core](https://stackoverflow.com/a/44477843/428061) – Søren Sep 25 '17 at 11:56

1 Answers1

5

Here is what helped for me: 1. Register Hangfire like this:

services.AddHangfire(configuration => configuration
                       .UseSqlServerStorage("connection string here"));

2. And one more thing (should be first):

services.AddScoped<EmailScheduler, EmailScheduler>();

I don't mark this answer as a right answer for some time... But If will not another answers, I will do)

Oleg
  • 1,467
  • 4
  • 26
  • 39