AbpZero AspBoilerplate Многопользовательская структура БД Интеграция с Hangfire - инициализация таблиц Hangfire в БД арендатора - PullRequest
0 голосов
/ 28 ноября 2018

Я могу успешно интегрировать и инициализировать 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'.

...