Я могу успешно интегрировать и инициализировать Hangfire, следуя приведенному здесь руководству https://aspnetboilerplate.com/Pages/Documents/Hangfire-Integration
Но имея мультитенантность с разными базами данных для каждого арендатора, Hangfire только инициализирует свои таблицы в Host DB из-заАргумент connectionString, указанный в Namespace.Web.Mvc.Startup.cs ниже:
//Hangfire (Enable to use Hangfire instead of default job manager)
services.AddHangfire(config =>
{
config.UseSqlServerStorage(_appConfiguration.GetConnectionString("Default"));
});
Поскольку AbpZero хранит строку подключения своего арендатора в таблице базы данных AbpTenants, я не собираюсь добавлять еще одну строку ConnectionString с именем «Tenant» в appSettings.json
Однако мне не удается получить доступ к DBContext в Startup.cs и расшифровать connectionString из HostDB, поскольку кажется, что он не может разрешить IDbContextProvider
в этом классе.
Любое предложение /подход к достижению этого?Лучше с некоторым примером кода (даже непроверенным) очень помогло бы.
Правка - Добавление кодов, которые я пробовал
Я пытаюсь внедрить свой DBContext и получить всю информацию об арендаторах для инициализации Hangfire.
public class Startup
{
public const string DefaultCorsPolicyName = "localhost";
private readonly IConfigurationRoot _appConfiguration;
private readonly IHostingEnvironment _hostingEnvironment;
private readonly IDbContextProvider<CustomDbContext> _appDbContextProvider;
public Startup(IHostingEnvironment env, IDbContextProvider<CustomDbContext> appDbContextProvider)
{
_appConfiguration = env.GetAppConfiguration();
_hostingEnvironment = env;
_appDbContextProvider = appDbContextProvider;
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var context = _appDbContextProvider.GetDbContext(); // when debugging it didnt even reach here
var tenants = context.Tenants;
//Hangfire (Enable to use Hangfire instead of default job manager)
services.AddHangfire(config =>
{
config.UseSqlServerStorage(_appConfiguration.GetConnectionString("Default"));
});
}
}
Но страница не может загрузиться, и я получил исключение:
InvalidOperationException: невозможно разрешить службу для типа 'Abp.EntityFrameworkCore.IDbContextProvider`1 [Namespace.EntityFrameworkCore.CustomDbContext]'при попытке активировать 'Namespace.Web.Startup.Startup'.