Как я могу обновить состояние резолвера в клиентском blazor wasm? - PullRequest
0 голосов
/ 17 июня 2020

В моем проекте будет возможность многократного использования баз данных, таких как SQLite и SQLServer. База данных может быть переключена во время выполнения с помощью класса Resolver, который я недавно добавил. Это вызовет правильный DbContext для фактического использования. Поэтому я создаю инъекцию зависимостей в Startup.cs следующим образом:

// ... code above ...
public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddResponseCompression(opts =>
            {
                opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
                    new[] { "application/octet-stream" });
            });


            //****** FIRST OPTION TO SOLVE THE PROBLEM ******//
            services
                .AddDbContext<SQLServerDbContext>(options =>
                    options.UseSqlServer(_configuration["ConnectionStrings:SQLServerConnection"]))
                .AddDbContext<SQLiteTestDbContext>(options =>
                    options.UseSqlite(_configuration["ConnectionStrings:SQLiteTestConnection"]))
                .AddScoped<DbContextResolver>()
                .AddScoped<IDbContext>(p =>
                {
                    var resolver = p.GetRequiredService<DbContextResolver>();
                    if (!resolver.isTest)
                    {
                        return p.GetRequiredService<SQLiteTestDbContext>();
                    }
                    return p.GetRequiredService<SQLServerDbContext>();
                });
...

Итак, есть класс преобразователя с единственным свойством public bool IsTest { get; set; }, и это должно быть установлено на стороне клиента (Blazor. Клиент) проект. Итак, моя проблема в том, что я не знаю, как установить состояние этого свойства, у меня есть встроенная Startup.cs моего проекта Blazor.Server эту промежуточную функцию:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.Use((context, next) => 
    {
        var resolver = context.RequestServices.GetRequiredService<DbContextResolver>();
        resolver.IsTest = context.Request.Query.Containskey("test);
        return next();
    });

    //.... code
}

Могу я просто ввести DbContextResolver в проекте Blazor.Client в режиме бритвы и работает как функция нажатия кнопки, где для свойства установлено значение true? Или это невозможно. Я все еще новичок в ASP. NET Core и Blazor WebAssembly, и мне нужна помощь :)

...