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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...