У меня есть проект Blazor WebAssembly ASP. NET Core со структурой проекта: клиент, сервер и общий доступ. Я хочу создать класс преобразователя, который будет получать HttpRequestMessage
от контроллера. Я хочу использовать несколько баз данных во время выполнения. Поэтому я создаю этот преобразователь, который будет создавать следующий экземпляр DbContext следующим образом:
my startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
...
//****** CHANGE DBCONTEXT WHEN HTTPRESPONSEMESSSAGE IS "TEST" HERE ******//
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>(); // <--- use this DbContext when DbContextResolver.IsTest = true.
}
return p.GetRequiredService<SQLServerDbContext>(); // <--- use this DbContext when DbContextResolver.IsTest = false.
});
...
}
Мой класс DbContextResolver имеет только одно publi c porperty: public bool IsTest { get; set; }
Я также создал эту промежуточную функцию, которая получит HttpRequestMessage
и обратную ссылку на инициализацию DbContext.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.Use((context, next) =>
{
var resolver = context.RequestServices.GetRequiredService<DbContextResolver>();
resolver.IsTest = context.Request.Query.ContainsKey("test"); // <--- Getting the HttpResponseMessage and setting therefore the resolver property.
return next();
});
...
}
Весь код здесь находится в приложении на стороне сервера. Я все еще новичок в ASP. NET Core и Blazor WebAssembly и не знаю, как получить сообщение от клиентского приложения.