Hangfire.Autofac与MVC应用程序 – 注入失败

我正在尝试创建一个简单的Hangfire测试,但它无法正常工作。 这是所有重要的代码,以及我如何使用Hangire.Autofac配置它。 不知道我在这里缺少什么。 我在/ hangfire dashbaord中获得的例外也在下面。

public class AmazonSqsService : IAmazonSqsService { private readonly IBackgroundJobClient _backgroundJobClient; private readonly ILogService _logService; public AmazonSqsService(IBackgroundJobClient backgroundJobClient, ILogService logService) { _backgroundJobClient. = backgroundJobClient; _logService= logService; } public async Task Test() { return _backgroundJobClient.Enqueue(() => Looper()); } public void Looper() { while (true) { _logService.Info("In Looper Loop"); Thread.Sleep(5000); } } } public partial class Startup { public static IContainer ConfigureContainer() { var builder = new ContainerBuilder(); RegisterApplicationComponents(builder); AppGlobal.Container = builder.Build(); } public static void RegisterApplicationComponents(ContainerBuilder builder) { builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); builder.Register(c => JobStorage.Current).As().InstancePerLifetimeScope(); builder.Register(c => new StateMachineFactory(JobStorage.Current)).As().InstancePerLifetimeScope(); } public static void ConfigureHangfire(IAppBuilder app) { app.UseHangfire(config => { config.UseAutofacActivator(AppGlobal.Container); config.UseSqlServerStorage("DefaultDatabase"); config.UseServer(); }); } } 

但是在仪表板中,我不断收到此任务的错误:

失败作业激活期间发生exception。 Autofac.Core.Registration.ComponentNotRegisteredException

请求的服务“App.Services.AmazonSqsService”尚未注册。 要避免此exception,请注册组件以提供服务,使用IsRegistered()检查服务注册,或使用ResolveOptional()方法解析可选的依赖项。

最终想出来了。

正确用法:

 public class Service : IService { public void MethodToQueue() { ... } } public class AnyOtherClass { public void StartTasks() { BackgroundJob.Enqueue(x => x.MethodToQueue()); //Good } } 

使用不正确(我做错了什么)

 public class Service : IService { public void StartTasks() { BackgroundJob.Enqueue(() => this.MethodToQueue()); //Bad } public void MethodToQueue() { ... } } public class AnyOtherClass { public AnyOtherClass(IService service) { service.StartTasks(); } }