【发布时间】:2021-06-06 08:36:09
【问题描述】:
我需要将 scoped 服务注入IOperationFilter,但 c-tor 无法使用:
class MyOperationFilter: IOperationFilter
{
public MyOperationFilter(IMyService service) { }
}
会报错:
System.InvalidOperationException: '无法从根提供程序站点解析范围服务:
这是意料之中的,因为只有 transient 服务可以被注入,不是作用域服务。
那么我怎样才能在IOperationFilter 中注入作用域服务?
文档或其他任何地方都没有示例。 我见过的示例使用瞬态非范围服务。
在 ASP.NET Core 中,通过将服务作为参数添加到 Invoke 方法,可以将范围服务注入到中间件中。但 Swashbuckle 似乎没有允许这样做的扩展。
查看源代码,我看不出 Swashbuckle 有办法做到这一点。
【问题讨论】:
-
如何将 IServiceProvider 注入到 ctor 中,然后用它解析您的作用域服务?
-
@grinay 我已经提到,由于依赖注入在 ASP.NET Core 的中间件中的工作方式,它无法工作。我更新了问题,使其更加清晰。谢谢。
标签: asp.net-core swashbuckle swashbuckle.aspnetcore