[英]Calling services scoped per request from reccuring background tasks using Autofac and Quartz in MVC 5
一提起,我的情况就不同于此链接 ,例如,它是重复发生的工作,而不是简单的“一劳永逸”的事情。
我正在使用Quartz,Autofac(带有Quartz的Autofac扩展名)和MVC 5。
问题是单实例服务可以从IJob类中很好地解决,但是我没有任何方法可以解决每个请求范围内的任何问题。 例如,假设每5分钟发生一次。
服务和存储库不能也不应进行范围限制。
那么,有人应该与长期运行且经常发生的后台任务做什么呢?
我不建议使用.InstancePerRequest()
方法,因为它需要位于Http请求方案中才能解析组件。 如果您有一个非常大的应用程序,则可能需要解析Http请求方案之外的某些组件。 在这种情况下,使用.InstancePerLifetimeScope()
方法注册它们通常更简单。
顺便说一句,如果您不能更改生命周期模式,则可以模拟Http请求方案。
static void Main(string[] args)
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<Foo>().AsSelf().InstancePerRequest();
IContainer container = builder.Build();
using (ILifetimeScope scope = container.BeginLifetimeScope(
MatchingScopeLifetimeTags.RequestLifetimeScopeTag))
{
scope.Resolve<Foo>();
}
}
这类似于Autofac.Integration.Mvc程序包所做的。
我不知道石英。 我看一下Quartz的Autofac集成的源代码,看来您可以通过使用以下代码指定使用的lifetimeScopeTag :
builder.RegisterModule(new QuartzAutofacFactoryModule(
MatchingScopeLifetimeTags.RequestLifetimeScopeTag));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.