Я только что ударился головой о стену, не зная, что происходит.
У меня есть основной веб-проект asp.net, нацеленный на .NET 4.7.2, который я использую.пытался настроить Hangfire.
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var connectionString = Configuration.GetConnectionString("DocumentDbConnection");
services.AddMvc(o =>
{
o.Filters.Add(typeof(HttpGlobalExceptionFilter));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services
.AddHangfire(x => x.UseSqlServerStorage(connectionString));
// configure StructureMap Dependency Injection
var container = new Container();
container.Configure(config =>
{
config.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AssembliesAndExecutablesFromApplicationBaseDirectory();
scan.WithDefaultConventions();
scan.AddAllTypesOf(typeof(IIntegrationEventHandler<>));
});
// other configurations
config.Populate(services);
});
// tried this too
//GlobalConfiguration.Configuration.UseStructureMapActivator(container);
return container.GetInstance<IServiceProvider>();
}
и мой метод настройки:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IContainer container)
{
//using Hangfire.StructureMap
GlobalConfiguration.Configuration.UseStructureMapActivator(container);
// exception is thrown on UsingHangfireServer()
app
.UseHangfireServer()
.UseMvc();
}
Я получаю исключение из StructureMap о двунаправленной зависимости:
Bi-directional dependency relationship detected!
Check the StructureMap stacktrace below:
1.) Instance of Hangfire.Client.IBackgroundJobFactory ('Hangfire.Client.BackgroundJobFactory, Hangfire.Core, Version=1.7.0.0, Culture=neutral, PublicKeyToken=null')
2.) new BackgroundJobFactory(*Default of IJobFilterProvider*, *Default of IBackgroundJobFactory*)
3.) Hangfire.Client.BackgroundJobFactory ('Hangfire.Client.BackgroundJobFactory, Hangfire.Core, Version=1.7.0.0, Culture=neutral, PublicKeyToken=null')
4.) Instance of Hangfire.Client.IBackgroundJobFactory ('Hangfire.Client.BackgroundJobFactory, Hangfire.Core, Version=1.7.0.0, Culture=neutral, PublicKeyToken=null')
5.) Container.GetInstance(Hangfire.Client.IBackgroundJobFactory)
6.) Container.TryGetInstance(Hangfire.Client.IBackgroundJobFactory)
Я используюпакеты Hangfire.AspNetCore, Hangfire.SqlServer, Hangfire.StructureMap, все версии 1.7.0
Я также пытался просто использовать пакет Hangfire, но не могу настроить его в своем классе запуска, поскольку ни один из методов расширения не был доступен.
Также обратите внимание, что эта точная настройка прекрасно работает в проекте, ориентированном на ядро .net.
Буду признателен за любой совет!