В моем проекте будет возможность многократного использования баз данных, таких как 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, и мне нужна помощь :)