您可以在配置阶段app.ApplicationServices
或使用HttpContext.RequestServices
访问IServiceProvider
。自定义JobActivator
应该是这样的:
public class AspNetCoreJobActivator : JobActivator
{
private IServiceProvider _serviceProvider;
public AspNetCoreJobActivator(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public AspNetCoreJobActivator(IHttpContextAccessor httpContextAccessor)
{
_serviceProvider = httpContextAccessor.HttpContext.RequestServices;
}
public AspNetCoreJobActivator(HttpContext context)
{
_serviceProvider = context.RequestServices;
}
public override object ActivateJob(Type type)
{
return _serviceProvider.GetService(type);
}
}
在Startup.cs
文件:
public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
{
GlobalConfiguration.Configuration.UseActivator(new AspNetCoreJobActivator(serviceProvider)); // or app.ApplicationServices
var server = new Hangfire.BackgroundJobServer();
app.UseMvcWithDefaultRoute();
}
你的情况是完全有效的。有时你需要延迟或发送对象的创建,这意味着你需要回到'容器'中。只要这个回调在[Composition Root](http://blog.ploeh.dk/2011/07/28/CompositionRoot/)内部实现,这[绝对好](http://blog.ploeh.dk /2011/08/25/ServiceLocatorrolesvs.mechanics/)。 – Steven