将 Hangfire 与 ServiceStack 结合使用

Using Hangfire with ServiceStack

有没有办法从 ServiceStack 服务启动 Hangfire 后台作业? 我已经能够从 MVC 中开始工作,在那里我可以解析 ServiceStack 服务,但我希望能够从 ServiceStack 中执行此操作。

经过更多调查后,我发现了这个 post setup example without owin?

一种解决方法是不安装整个 Hangfire nuget 包,只安装 Hangfire.Core 和 Hangfire.SqlServer(或相应的存储选项),这只需要引用 Owin 包。唯一的缺点是不能使用Hangfire Dashboard。

然后通过以下代码启动Hangfire和任意作业:

   JobStorage.Current = new SqlServerStorage("connection string");
   var server = new BackgroundJobServer();
   server.Start();

   RecurringJob.AddOrUpdate(() => System.Diagnostics.Debug.WriteLine("No OWIN"), Cron.Minutely);

此外,您可以将 ServiceStack Funq 用于 HangFire JobActivator:

JobActivator.Current = new FunqJobActivator(container);

创建 FunqJobActivator 后如下:

    public override object ActivateJob(Type jobType)
    {
        var resolved = _container.TryResolve(jobType);

        if (resolved == null)
        {
            foreach (Type it in jobType.GetInterfaces())
            {
                resolved = _container.TryResolve(it);
                if(resolved != null)break;
            }
        }

        return resolved;
    }