我有 ASP.NET Core 托管的 Blazor WebAssembly 项目,其项目结构为客户端、服务器和共享。我想构建一个解析器类,它将HttpRequestMessage
从控制器接收一个。我想在运行时使用多个数据库。因此,我正在构建这个解析器,它将像这样实例化以下 DbContext:
我的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 类只有一个公共属性: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 还是很陌生,不知道如何从客户端应用程序接收消息。