2017-07-05 37 views
0

我使用hangfire lauch後臺作業,但我有一個問題,當我嘗試使用與generic的hangfire autofac集成自動解決任務服務它不工作,因爲它無法解決依賴關係之一。我想是因爲我沒有收到任何錯誤。Hangfire Autofac集成不能解決服務與註冊的依賴關係

BackgroundJob.Enqueue<IBackgroundTask>(x => x.RunAsync()); 

如果我使用其他方式通過自己解決它的工作。

var service = ApplicationContainer.Resolve<IBackgroundTask>();  
BackgroundJob.Enqueue(() => service.RunAsync()); 

我發現在我的構造函數中有一個導致問題的測試服務。如果我在構造函數中刪除服務,則服務會得到解決。

public class ConvertCarteCreditService : IBackgroundTask 
    { 
     private readonly ILogger logger; 
     private readonly ITest testService; 

     public BackgroundTask(ILogger logger, **ITest test**) 
     { 
     this.logger = logger; 
     this.testService = test; 
     // this.testService = Startup.Resolve<ITest>();    
     } 

我已經在啓動類配置autofac這樣的:

public void ConfigureServices(IServiceCollection services) 
    { 

    var builder = new ContainerBuilder(); 

    ServiceLayerInstaller.ConfigureServices(builder);     
    DataLayerInstaller.ConfigureServices(builder, connectionString, readOnlyConnectionString); 

    builder.RegisterAssemblyTypes(typeof(WorkerRoleInstaller). 
GetTypeInfo().Assembly).Where(t => t.Name.EndsWith("Test")) 
.AsImplementedInterfaces(); 

    WorkerRoleInstaller.ConfigureServices(builder); 

    builder.Populate(services); 
    ApplicationContainer = builder.Build(); 

    var autofacJobActivator = new AutofacJobActivator(ApplicationContainer);  

    GlobalConfiguration.Configuration.UseActivator(autofacJobActivator); 

    } 
+0

「ITest」的實現是什麼?該類是否實現了多個接口? – VMAtm

回答

0

我發現我probleme是,我沒有從提供配置服務功能回到服務提供商**而是創建作爲無效並且不返回任何東西。

public **IServiceProvider** ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(); 
     services.AddDirectoryBrowser();    
     services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 

     var builder = new ContainerBuilder(); 

     builder.Populate(services); 

     ServiceLayerInstaller.ConfigureServices(builder);      

     WorkerRoleInstaller.ConfigureServices(builder); 

     ApplicationContainer = builder.Build(); 

     var autofacJobActivator = new AutofacJobActivator(ApplicationContainer, false); 
     GlobalConfiguration.Configuration.UseActivator(autofacJobActivator); 

     **return new AutofacServiceProvider(ApplicationContainer);** 
    }