将Hangfire与ServiceStack一起使用

时间:2016-07-27 08:57:44

标签: servicestack hangfire

有没有办法从ServiceStack服务启动Hangfire后台作业? 我已经能够从MVC中开始工作,我可以在那里解决ServiceStack服务,但我希望能够从ServiceStack中做到这一点。

1 个答案:

答案 0 :(得分:4)

经过一番调查后,我发现了这篇文章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;
    }