我有自定义中间件。我尝试使用构造函数注入来注入我的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
通常被注册为范围服务。
在中间件中使用范围服务时,请将服务注入到Invoke
或InvokeAsync
方法中。不要通过构造函数注入进行注入,因为它会强制服务表现为单例。有关更多信息,请参见ASP.NET Core Middleware。
重点矿
参考Dependency injection in ASP.NET Core: Scoped Service lifetime