我有一个WebApi项目,并且在控制器中,我正在使用HostingEnvironment.QueueBackgroundWorkItem
在单独的线程中开始工作:
public IHttpActionResult DoJob()
{
HostingEnvironment.QueueBackgroundWorkItem(ct =>
{
var service = new MyService(logService, userInfo);
var entity = service.DoJob(ct);
});
return Ok();
}
当前,在上面的示例中,我正在使用我的service的一个具体实例(我要替换)。我还使用Autofac
,并且为我的服务配置如下:
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerRequest();
在请求中正常使用时,上述注册适用于所有服务。
在请求终止后在单独的线程中运行时,上述注册对服务也适用吗?
答案 0 :(得分:0)
在请求终止后在单独的线程中运行时,上述注册对服务也适用吗?
是的,注册的配置将起作用。
无论您在服务中调用哪种方法,都可能会行不通:
以下两种情况之一是正确的。
由于请求仍然存在,有时您可能会使用autofac,但有时由于请求结束而不会。
或(最有可能)
QueueBackgroundWorkItem()
的执行不在生命周期范围内,因此根本无法使用。
因此最终,您的服务应该创建它自己的生存期范围(IDisposable等)。
答案 1 :(得分:0)
依赖注入与线程无关,除非我们在应用程序/服务启动时错过了对该线程所有可访问成员的依赖注入配置。