繁体   English   中英

在MVC 5中使用Autofac和Quartz从调用后台任务中获得的每个请求范围内的呼叫服务

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM