首页 文章

Hangfire 1.6.4 .NET Core - 无法解决依赖关系

提问于
浏览
3

我在我的.NET Core项目中使用Hangfire 1.6.4 .

这是我的Schedule控制器:

[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);
    }

但是我在执行作业时遇到错误:

// 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.

我已经注册了ContainerJobActivator:

public class ContainerJobActivator : JobActivator
{
    private readonly IServiceProvider _serviceProvider;

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

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

在Startup类中:

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

怎么了?

谢谢!

1 回答

  • 4

    这对我有帮助:1 . 像这样注册Hangfire:

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

    还有一件事(应该是第一件事):

    services.AddScoped<EmailScheduler, EmailScheduler>();
    

    我有一段时间没有把这个答案标记为正确的答案......但如果不是另一个答案,我会这样做)

相关问题