如何解决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 举报,一经查实,本站将立刻删除。