I want to use hangfire in my Asp.Net MVC App and I'm using Autofac as DI.
I've installed Hangfire.Autofac nuget
I want to add a recurring job like this:
UserService.cs
public class UserService : IUserService
{
public void MyRecurringJob() { // do something here }
}
startup.cs
[assembly: OwinStartup(typeof(MyApp.Web.Startup))]
namespace MyApp.Web
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var AutofacContainer = AutofacDependencyResolver.Current.ApplicationContainer;
GlobalConfiguration.Configuration.UseSqlServerStorage("AppDbContext").UseAutofacActivator(AutofacContainer);
app.UseHangfireDashboard("/jobs");
app.UseHangfireServer();
var _user = DependencyResolver.Current.GetService<IUserService>();
RecurringJob.AddOrUpdate("SyncUsers", () => _user.MyRecurringJob(), Cron.Hourly());
}
}
}
And I get this error:
Unable to resolve the type 'MyApp.Core.Service.UserService' because the lifetime scope it belongs in can't be located. The following services are exposed by this registration: - MyApp.Core.Service.UserService Details
Autofac.Core.DependencyResolutionException: Unable to resolve the type 'MyApp.Core.Service.UserService' because the lifetime scope it belongs in can't be located. The following services are exposed by this registration:
- MyApp.Core.Service.UserService
Details ---> Autofac.Core.DependencyResolutionException: No scope with a tag matching 'AutofacWebRequest' is visible from the scope in which the instance was requested.
If you see this during execution of a web application, it generally indicates that a component registered as per-HTTP request is being requested by a SingleInstance() component (or a similar scenario). Under the web integration always request dependencies from the dependency resolver or the request lifetime scope, never from the container itself.
I'm not able to test it now, but in order to register a recurring job with Hangfire and Autofac you should write