项目
版本

没有匹配标签的作用域

示例消息

没有匹配标签 "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 作为单例,然后又注册了第二个 IMyServiceInstancePerMatchingLifetimeScope。如果在不匹配的生命周期范围内尝试解析 IEnumerable<IMyService>,您会收到错误。尽管其中一个 IMyService 可能可以解析,但并非所有 IMyService 都可以。InstancePerMatchingLifetimeScope 并不是一个允许某些实例 有时 被解析的 过滤器
在本文档中