有没有办法从ServiceStack服务启动Hangfire后台作业? 我已经能够从MVC中开始工作,我可以在那里解决ServiceStack服务,但我希望能够从ServiceStack中做到这一点。
答案 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;
}