为什么无法在自定义中间件的构造函数中解析 DbContext?

Y.Y*_*.Y. 1 .net c# middleware .net-core

我有自定义中间件。我尝试构造函数注入来注入我的 DbContext。但这不起作用。以下内容不起作用并给出 InvalidOperationException:无法从根提供程序解析作用域服务“MyDbContext”;

private MyDbContext _context;    
public RequestResponseMiddleware(RequestDelegate next, MyDbContext context)
{
    _next = next;
    _context = context;
} 
Run Code Online (Sandbox Code Playgroud)

但是当我在 InvokeAsync 方法中使用它作为参数时,它就可以工作。以下作品

public Task InvokeAsync(HttpContext context, MyDbContext  _context)
{

}
Run Code Online (Sandbox Code Playgroud)

有谁知道原因吗?

Nko*_*osi 8

DbContext通常注册为范围服务。

在中间件中使用作用域服务时,将该服务注入到InvokeInvokeAsync方法中。不要通过构造函数注入进行注入,因为它会强制服务表现得像 singleton。有关详细信息,请参阅ASP.NET Core 中间件

强调我的

参考ASP.NET Core 中的依赖注入:作用域服务生命周期