autofac - ASP.net core 3.0+ DependencyResolutionExcp 中的 Autofac:用于 InstancePerRequest 或 InstancePerMatchingLifeTimeScope
问题描述
处理请求时发生未处理的异常。
DependencyResolutionException:从请求实例的范围中看不到标签匹配“”的范围。如果您在执行 Web 应用程序期间看到这种情况,这通常表明注册为 per-HTTP 请求的组件正在被 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,总是从依赖解析器或请求生命周期范围请求依赖,而不是从容器本身。Autofac.Core.Lifetime.MatchingScopeLifetime.FindScope(ISharingLifetimeScope mostNestedVisibleScope)
DependencyResolutionException:无法解析类型“AutofacWebApplication.Service.TestService”,因为无法找到它所属的生命周期范围。此注册公开了以下服务: - AutofacWebApplication.Service.ITestService详细信息 Autofac.Core.Resolving.Middleware.ScopeSelectionMiddleware.Execute(ResolveRequestContext context, Action next)
堆栈查询 Cookie 标头路由
DependencyResolutionException:从请求实例的范围中看不到标签匹配“”的范围。如果您在执行 Web 应用程序期间看到这种情况,这通常表明注册为 per-HTTP 请求的组件正在被 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,总是从依赖解析器或请求生命周期范围请求依赖,而不是从容器本身。Autofac.Core.Lifetime.MatchingScopeLifetime.FindScope(ISharingLifetimeScope mostNestedVisibleScope) Autofac.Core.Resolving.Middleware.ScopeSelectionMiddleware.Execute(ResolveRequestContext context, Action next)解决方案
根据文档:
使用 InstancePerLifetimeScope 而不是 InstancePerRequest。在以前的 ASP.NET 集成中,您可以注册一个依赖项,
InstancePerRequest
这样可以确保每个 HTTP 请求只创建一个依赖项实例。这是因为 Autofac 负责设置每个请求的生命周期范围。随着.Microsoft.Extensions.DependencyInjection
_ _ 而不是注册您的依赖项InstancePerRequest
,使用InstancePerLifetimeScope
你应该得到同样的行为。请注意,如果您在 Web 请求期间创建自己的生命周期范围,您将在这些子范围中获得一个新实例。
除此之外 - 这意味着也不要使用InstancePerMatchingLifetimeScope
,因为正如你所看到的,没有一个会匹配。
推荐阅读
- php - 如何在 html 表单中保持引导模式?
- python - 在 __init__ Python 类构造函数中运行并返回类函数的值
- javascript - 正则表达式只允许输入 3 位小数,0.001 是可能的最小数字,而不是 0
- azure - 如何使用 Azure 触发器构建具有多种方法的 API?
- ubuntu - Vim 8.0:无法在 Ubuntu 18.04 LTS 上禁用自动缩进
- javascript - 对于 CodyHouse 的计划模板,如何将 .load 方法更改为直接使用 jQuery 中的 html 文件中的变量?
- ios - 将统一文件导入已制作的 Xcode 文件
- c# - 如何让 UpdatePanel 为多个按钮工作?
- twilio - twillio studio 发送消息流contact.channel
- tsql - SQL 2017 - 比较两个表之间的值,其中某些值可以为 NULL