2016-07-22 2 views
1

私は今、HangFireの使用を開始しました。私がIIS Expressからローカルに実行すると、ジョブは正常に動作するようですが、devサーバーで実行すると、パラメータのないコンストラクタが定義されていないというエラーが発生します。以前はSimple Injectorを使用していましたが、今はAutofacに移行しました。HangFire定期ジョブは、Autofac.Core.Registration.ComponentNotRegisteredExceptionまたはパラメータなし例外なしで失敗します。

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 * * * *" 
    } 
} 

ここに私の依存関係を登録するコードがあります。

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; 
    } 

} 

誰かが間違っていることを教えてください。あなたはすでにあなたのためGlobalConfiguration.Configuration.UseAutofacActivator(container);であなただけのシンプルなのlet hangfireとAutofacの解決の依存関係をAutoFacを追加しましたので、私はまた、Hangfireディスカッションフォーラム

答えて

1

にこれを掲載しました。

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 * * * *" 
} 
関連する問題