2017-07-05 13 views
0

hangfireをバックグラウンドジョブに使用していますが、タスクサービスを自動的に解決するためにhangfire autofacとの統合を使用しようとすると問題が発生します。依存関係の1つを解決することはできません。私は何のエラーも受けないので、私は思う。Hangfire Autofac統合が登録依存関係でサービスを解決できない

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

私はmyselftで解決して別の方法を使用しています。

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」の実装は何ですか?そのクラスは1つ以上のインターフェースを実装していますか? – VMAtm

答えて

0

私は私のproblemeは私が設定するサービス機能から**サービスプロバイダを返す代わりに作成していないということがわかりましたvoidとして機能し、何も返しません。

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