我有自定义中间件。我尝试使用构造函数注入来注入我的DbContext。但这行不通。以下操作不起作用,并提供InvalidOperationException:无法从根提供程序解析作用域服务'MyDbContext';

private MyDbContext _context;
public RequestResponseMiddleware(RequestDelegate next, MyDbContext context)
{
    _next = next;
    _context = context;
}


但是,当我在InvokeAsync方法中将其用作参数时,它将起作用。以下作品

public Task InvokeAsync(HttpContext context, MyDbContext  _context)
{

}


有人知道原因吗?

最佳答案

DbContext通常被注册为范围服务。


  在中间件中使用范围服务时,请将服务注入到InvokeInvokeAsync方法中。不要通过构造函数注入进行注入,因为它会强制服务表现为单例。有关更多信息,请参见ASP.NET Core Middleware


重点矿

参考Dependency injection in ASP.NET Core: Scoped Service lifetime

09-29 20:00