微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Quartz.NET 3.2.3 与 Autofac 6.1.0 依赖注入 ASP.NET MVC

如何解决Quartz.NET 3.2.3 与 Autofac 6.1.0 依赖注入 ASP.NET MVC

我正在尝试用 Quartz.NET 做一些预定的工作。 当我在 TestJob 类中使用构造函数进行注入时,断点不会出现在这里。 当我在 AutofacSettings 中使用属性注入时,它无法设置属性 _userService 的值。

我尝试了很多方法,阅读了很多文章,但我还是被这个问题困住了。

这个解决方案看起来像一个答案,但由于版本更新(我认为),它对我不起作用:How do I create a Quartz.NET’s job requiring injection with autofac

自动设置

public class AutofacSettings
{
    public static void Run()
    {
        ContainerBuilder builder = new ContainerBuilder();
        builder.RegisterControllers(Assembly.GetExecutingAssembly());
        builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerRequest();
        builder.RegisterType<DbFactory>().As<IDbFactory>().InstancePerRequest();
        builder.RegisterassemblyTypes(Assembly.Load("DepremsizHayat.Business")).Where(p => p.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerRequest();
        builder.RegisterassemblyTypes(Assembly.Load("DepremsizHayat.Business")).Where(p => p.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerRequest();
        RegisterScheduler(builder);
        IContainer container = builder.Build();
        ConfigureScheduler(container);
        AutofacDependencyResolver resolver = new AutofacDependencyResolver(container);
        DependencyResolver.SetResolver(resolver);
    }

    private static void RegisterScheduler(ContainerBuilder builder)
    {
        var schedulerConfig = new NameValueCollection {
          {"quartz.threadPool.threadCount","3"},};
        builder.RegisterModule(new QuartzAutofacFactoryModule
        {
            ConfigurationProvider = c => schedulerConfig
        });
        builder.RegisterModule(new QuartzAutofacJobsModule(typeof(TestJob).Assembly));
        builder.RegisterType<TestJobScheduler>().AsSelf();
    }
    private static void ConfigureScheduler(IContainer container)
    {
        var scheduler = container.Resolve<TestJobScheduler>();
        scheduler.Start();
    }
}

测试作业

public class TestJob : IJob
{
    public IUserService _userService { get; set; }
    Task IJob.Execute(IJobExecutionContext context)
    {
        System.Diagnostics.Debug.WriteLine(_userService.GetById(1).FirsT_NAME.ToString());
        return Task.CompletedTask;
    }
}

TestJobScheduler

public class TestJobScheduler
{
    private readonly IScheduler _scheduler;
    public TestJobScheduler(IScheduler scheduler)
    {
        this._scheduler = scheduler;
    }
    public void Start()
    {
        _scheduler.Start();
        IJobDetail job = JobBuilder.Create<TestJob>().Build();
        ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(
            s =>
            s
            .WithIntervalInSeconds(30).WithRepeatCount(3)
            ).StartNow().Build();
        _scheduler.ScheduleJob(job,trigger);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。