2016-07-22 1 views
1

방금 ​​HangFire를 사용하기 시작했습니다. 작업은 IIS Express에서 로컬로 실행할 때 제대로 작동하는 것처럼 보입니다.하지만 devver 서버에서 실행하면 매개 변수가없는 생성자가 정의되지 않은 오류가 발생합니다. 이전에 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; 
    } 

} 

내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 또한 Hangfire 토론 포럼에 게시했습니다.

답변

1

AutoFacGlobalConfiguration.Configuration.UseAutofacActivator(container);에 이미 추가 했으므로 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 * * * *" 
} 
관련 문제