没有匹配标签的作用域
示例消息
没有匹配标签 "AutofacWebRequest" 的可见范围,该范围中请求了实例。
如果您在运行 Web 应用程序时看到此消息,通常表示注册为按 HTTP 请求的组件被单例(或类似场景)组件所请求。在集成 Web 应用程序时,始终从依赖解析器或请求生命周期范围请求依赖项,而不是直接从容器本身请求。
这个错误意味着 Autofac 尝试解决一个已注册为 InstancePerMatchingLifetimeScope
的服务,但没有找到匹配的生命周期范围。
故障排除
- 在 ASP.NET 经典 Web 应用程序(如 ASP.NET MVC、Web 表单等)中,可能是因为缺少了 请求生命周期范围 。例如,试图在应用程序启动时运行但使用按请求注册的服务的代码将失败。 更多有关如何调试此类问题的信息,请参阅 关于处理请求生命周期范围的 FAQ 。
- 在 ASP.NET Core 应用程序中,可能是您已将某些内容注册为
InstancePerRequest
。ASP.NET Core 没有名为请求生命周期范围的命名范围 - 相反,请使用InstancePerLifetimeScope
。有关更多详细信息,请参阅 ASP.NET Core 集成文档 。 - 如果您在自己的应用程序中创建了自定义的按请求语义,类似于
InstancePerRequest
,那么可能是有一些代码将某些内容注册为InstancePerRequest
,但服务是在请求生命周期范围之外进行解析的。这可能发生在试图在具有按请求生命周期范围和不具有此类范围(如 Web 应用程序和后台处理任务)之间共享注册模块的情况下,或者在应用程序启动之前尝试使用按请求对象的代码运行时。 - 如果注册了一些组件与匹配的生命周期范围,而另一些则没有,可能会导致问题。例如,假设您注册了一个
IMyService
作为单例,然后又注册了第二个IMyService
为InstancePerMatchingLifetimeScope
。如果在不匹配的生命周期范围内尝试解析IEnumerable<IMyService>
,您会收到错误。尽管其中一个IMyService
可能可以解析,但并非所有IMyService
都可以。InstancePerMatchingLifetimeScope
并不是一个允许某些实例 有时 被解析的 过滤器。