.NET中Middleware如何构造时,为何总是无法获取到那些Scoped服务的实例呢?

2026-03-30 15:000阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1071个文字,预计阅读时间需要5分钟。

.NET中Middleware如何构造时,为何总是无法获取到那些Scoped服务的实例呢?

为什么在中间件的构造函数里不能使用`scope`的生命周期类型呢?

在ASP.NET Core中,中间件的构造函数通常接收一个`IApplicationBuilder`参数,该参数允许你注册中间件。中间件的构造函数不应该使用`scope`的生命周期类型,原因如下:

1. 作用域限制:`scope`的生命周期类型通常用于依赖注入容器中,它表示一个请求的生命周期。在中间件的构造函数中使用`scope`生命周期可能会导致中间件在请求之间共享状态,这通常不是预期的行为,因为中间件应该是无状态的。

2. 设计原则:中间件的设计原则是轻量级和可复用。使用`scope`生命周期可能会违反这些原则,因为中间件可能需要额外的资源来维护状态,这会增加开销。

3. 可预测性:使用`scope`生命周期可能会使中间件的运行行为变得不可预测,因为它依赖于请求的生命周期,而请求的生命周期可能因各种原因而变化。

阅读全文

本文共计1071个文字,预计阅读时间需要5分钟。

.NET中Middleware如何构造时,为何总是无法获取到那些Scoped服务的实例呢?

为什么在中间件的构造函数里不能使用`scope`的生命周期类型呢?

在ASP.NET Core中,中间件的构造函数通常接收一个`IApplicationBuilder`参数,该参数允许你注册中间件。中间件的构造函数不应该使用`scope`的生命周期类型,原因如下:

1. 作用域限制:`scope`的生命周期类型通常用于依赖注入容器中,它表示一个请求的生命周期。在中间件的构造函数中使用`scope`生命周期可能会导致中间件在请求之间共享状态,这通常不是预期的行为,因为中间件应该是无状态的。

2. 设计原则:中间件的设计原则是轻量级和可复用。使用`scope`生命周期可能会违反这些原则,因为中间件可能需要额外的资源来维护状态,这会增加开销。

3. 可预测性:使用`scope`生命周期可能会使中间件的运行行为变得不可预测,因为它依赖于请求的生命周期,而请求的生命周期可能因各种原因而变化。

阅读全文