从中间件访问DBContext的最佳方式?



我有这个:

app
.Use(async (context, next) =>
{
await next();
StatusCode(DB.AddRequest(context, context.Response.StatusCode < 400));
});

基本上,这段代码只是向(MariaDB)数据库添加一些HTTP上下文信息。这不是简单的日志记录,但当有太多无效请求时,它还会触发警告系统。如果我使AddRequest成为一个从服务中检索DB上下文的本地函数,然后在DB上下文中调用此方法,则可以正常工作。
然而,当我使用例如app.MapGet(),然后我可以使用:

app.MapGet("/action/{name}", (HttpContext context, RequestContext db, string name) => ...

并且DI将在调用中包含DB上下文。
是否可以对app.Use()做同样的事情,并让DI在这个调用中插入DB上下文,因为调用服务作用域来检索DB,然后调用它看起来不太漂亮。
我只是好奇这是否能在一个最小的Api中工作。

使用上下文的RequestServices属性:

app
.Use(async (context, next) =>
{
await next();
var db = context.RequestServices.GetRequiredService<RequestContext>();
});

最新更新