2015-05-06 4 views
1

Недавно я обновился до новой версии Hangfire, и я изо всех сил пытаюсь настроить мой webapi с помощью autofac и Hangfire. Я использую Autofac Hangfire интеграции версии 1.1 и Hangfire 1.4.2. Я использую Owin для размещения. Я продолжаю получать следующую ошибку:Asp.net web api с autofac и Hangfire

The requested service 'IFoo' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.

Вот моя конфигурация запуска owin. Все мои регистрации выполнены в AutofacStandardModule классе

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     //we will have the firewall block all CE endpoints from the outside instead 
     //ConfigureOAuthTokenConsumption(app); 

     var storage = new SqlServerStorage("connection string"); 

     JobStorage.Current = storage; 

     app.UseHangfireServer(new BackgroundJobServerOptions(),storage); 
     app.UseHangfireDashboard("/Hangfire",new DashboardOptions(),storage); 
     var builder = new ContainerBuilder(); 
     builder.RegisterModule(new AutofacStandardModule()); 
     var container = builder.Build(); 

     GlobalConfiguration.Configuration.UseAutofacActivator(container); 
     } 
} 

Кроме того, здесь мой веб-класс апи конфигурации. Я не вижу, как я должен быть настройкой замедленного воспламенения здесь также, хотя ..

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config, Autofac.Module moduleToAppend) 
    { 
     config.MapHttpAttributeRoutes(); 

     config.EnableCors(); 
     config.EnableSystemDiagnosticsTracing(); 

     var builder = new ContainerBuilder(); 

     builder.RegisterAssemblyTypes(
      Assembly.GetExecutingAssembly()) 
       .Where(t => 
        !t.IsAbstract && typeof(ApiController).IsAssignableFrom(t)) 
       .InstancePerLifetimeScope(); 

     builder.RegisterModule(
      new AutofacStandardModule()); 

     if (moduleToAppend != null) 
     { 
      builder.RegisterModule(moduleToAppend); 
     } 

     var container = builder.Build(); 

     config.DependencyResolver = new AutofacWebApiDependencyResolver(
      container); 

     //Hangfire.GlobalConfiguration.Configuration.UseAutofacActivator(container); 

     //JobActivator.Current = new AutofacJobActivator(container); 
     } 
} 

ответ

1

Я решил этот вопрос, казалось, я не уточнил достаточно ясно, какого тип моей работы была когда enqueuing.

Что же было изменить

_jobClient.Enqueue(
      () => _foo.Bar(fooId, fooId2)); 

..into ..

_jobClient.Enqueue<IFoo>(x => x.Bar(fooId, fooId2)); 
Смежные вопросы