C# 服务器上的HangFire定期作业失败,出现Autofac.Core.Registration.ComponentNotRegisteredException或无参数异常

C# 服务器上的HangFire定期作业失败,出现Autofac.Core.Registration.ComponentNotRegisteredException或无参数异常,c#,asp.net-mvc,hangfire,hangfire-autofac,C#,Asp.net Mvc,Hangfire,Hangfire Autofac,我刚开始使用HangFire。当我从IIS Express在本地运行它时,这些作业似乎工作得很好,但是当我在我的开发服务器上运行它时,我得到了没有定义无参数构造函数的错误。我以前用的是简单的注射器,但现在我改用了Autofac public class Startup { public void Configuration(IAppBuilder app) { ConfigureAuth(app); ConfigureIoc(app);

我刚开始使用HangFire。当我从IIS Express在本地运行它时,这些作业似乎工作得很好,但是当我在我的开发服务器上运行它时,我得到了没有定义无参数构造函数的错误。我以前用的是简单的注射器,但现在我改用了Autofac

 public class Startup
{

    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
        ConfigureIoc(app);
        ConfigureRoutes();
        ConfigureHangfire(app);
        ScheduleXeroMonitor();
    }

    public void ConfigureHangfire(IAppBuilder app)
    {
        var authList = new List<IDashboardAuthorizationFilter>
        {
            new ClaimsBasedAuthorizationFilter("role", "admin")
        };
        var options = new DashboardOptions
        {
            Authorization = authList,
            AppPath = "/Manage"

        };

        app.UseHangfireDashboard("/hangfire", options);
        app.UseHangfireServer();
    }

    public void ConfigureRoutes()
    {
        BundleTable.EnableOptimizations = true;
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

    public void ConfigureIoc(IAppBuilder app)
    {
        var builder = DependencyRegistrar.RegisterClasses();
        var container = builder.Build();
        app.UseAutofacMiddleware(container);
        app.UseAutofacMvc();
        GlobalConfiguration.Configuration.UseAutofacActivator(container);
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    }

    public void ConfigureAuth(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Login"),
            CookieSecure = CookieSecureOption.SameAsRequest,
        });
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
        {
            AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
            AuthenticationMode = AuthenticationMode.Passive
        });


        AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;
    }

    public void ScheduleXeroMonitor()
    {            
        var backGroundWorker = DependencyResolver.Current.GetService<IXeroBackGroundWorker>();            
        RecurringJob.AddOrUpdate("XeroPolling", () => backGroundWorker.PollJobs(), Cron.Minutely); //change the Cron to every 5 minutes    

        var emailWorker = DependencyResolver.Current.GetService<IEmailService>();
        RecurringJob.AddOrUpdate("EmailPolling", () => emailWorker.SendQueuedEmails(), Cron.Minutely);//"*/10 * * * *"
    }
}
公共类启动
{
公共无效配置(IAppBuilder应用程序)
{
ConfigureAuth(app);
配置IOC(应用程序);
配置路由();
配置Hangfire(app);
ScheduleXeroMonitor();
}
公共无效配置hangfire(IAppBuilder应用程序)
{
var authList=新列表
{
新的ClaimsBasedAuthorizationFilter(“角色”、“管理员”)
};
var options=新的仪表板选项
{
授权=授权列表,
AppPath=“/Manage”
};
app.UseHangfireDashboard(“/hangfire”,选项);
app.UseHangfireServer();
}
公共无效配置路由()
{
BundleTable.EnableOptimizations=true;
RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
公共无效配置IOC(IAppBuilder应用程序)
{
var builder=DependencyRegistrator.RegisterClass();
var container=builder.Build();
app.useautofac中间件(容器);
app.UseAutofacMvc();
GlobalConfiguration.Configuration.UseAutofacActivator(容器);
SetResolver(新的AutofacDependencyResolver(容器));
}
public void ConfigureAuth(IAppBuilder应用程序)
{
app.UseCookieAuthentication(新的CookieAuthenticationOptions()
{
AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
LoginPath=新路径字符串(“/Login”),
CookieSecure=CookieSecureOption.SameAsRequest,
});
app.useAuthBeareAuthentication(新的OAuthBeareAuthenticationOptions()
{
AuthenticationType=DefaultAuthenticationTypes.ExternalBearer,
AuthenticationMode=AuthenticationMode.Passive
});
AntiForgeryConfig.UniqueClaimTypeIdentifier=ClaimTypes.Name;
}
public void ScheduleXeroMonitor()
{            
var backGroundWorker=DependencyResolver.Current.GetService();
RecurringJob.AddOrUpdate(“Xeropling”,()=>backGroundWorker.PollJobs(),Cron.Minutely);//将Cron更改为每5分钟一次
var emailWorker=DependencyResolver.Current.GetService();
RecurringJob.AddOrUpdate(“EmailPolling”,()=>emailWorker.SendQueuedEmails(),Cron.Minutely);/“*/10****”
}
}
这是我注册依赖项的代码

public class DependencyRegistrar
{
    public static ContainerBuilder RegisterClasses()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<XeroSyncRestClient>().As<IXeroSyncRestClient>().InstancePerLifetimeScope();
        builder.RegisterType<XeroBackGroundWorker>().As<IXeroBackGroundWorker>().InstancePerLifetimeScope();
        builder.RegisterType<EmailService>().As<IEmailService>().InstancePerLifetimeScope();
        builder.RegisterControllers(Assembly.GetExecutingAssembly());            
        return builder;
    }

}
公共类依赖注册器
{
公共静态容器生成器注册表类()
{
var builder=new ContainerBuilder();
builder.RegisterType();
builder.RegisterType();
builder.RegisterType();
RegisterController(Assembly.getExecutionGassembly());
返回生成器;
}
}

有人能告诉我我做错了什么吗?我也在Hangfire讨论论坛上发布了这篇文章,因为您已经在
GlobalConfiguration.Configuration.UseAutofacActivator(容器)中添加了
AutoFac
您只需简单地让hangfire和Autofac为您解决依赖关系

public void ScheduleXeroMonitor()
{            
    //var backGroundWorker = DependencyResolver.Current.GetService<IXeroBackGroundWorker>();  --> let hangfire and autofac do this for you          
    RecurringJob.AddOrUpdate<IXeroBackGroundWorker>("XeroPolling", backGroundWorker => backGroundWorker.PollJobs(), Cron.Minutely); //change the Cron to every 5 minutes    

    //var emailWorker = DependencyResolver.Current.GetService<IEmailService>();--> let hangfire and autofac do this for you          
    RecurringJob.AddOrUpdate<IEmailService>("EmailPolling", emailWorker => emailWorker.SendQueuedEmails(), Cron.Minutely);//"*/10 * * * *"
}
public void ScheduleXeroMonitor()
{            
//var backGroundWorker=dependencysolver.Current.GetService();-->让hangfire和autofac为您完成这项工作
RecurringJob.AddOrUpdate(“Xeropling”,backGroundWorker=>backGroundWorker.PollJobs(),Cron.Minutely);//将Cron更改为每5分钟一次
//var emailWorker=DependencyResolver.Current.GetService();-->让hangfire和autofac为您完成这项工作
RecurringJob.AddOrUpdate(“EmailPolling”,emailWorker=>emailWorker.SendQueuedEmails(),Cron.Minutely);/“*/10****”
}