.NET中Middleware如何构造时,为何总是无法获取到那些Scoped服务的实例呢?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1071个文字,预计阅读时间需要5分钟。
为什么在中间件的构造函数里不能使用`scope`的生命周期类型呢?
在ASP.NET Core中,中间件的构造函数通常接收一个`IApplicationBuilder`参数,该参数允许你注册中间件。中间件的构造函数不应该使用`scope`的生命周期类型,原因如下:
1. 作用域限制:`scope`的生命周期类型通常用于依赖注入容器中,它表示一个请求的生命周期。在中间件的构造函数中使用`scope`生命周期可能会导致中间件在请求之间共享状态,这通常不是预期的行为,因为中间件应该是无状态的。
2. 设计原则:中间件的设计原则是轻量级和可复用。使用`scope`生命周期可能会违反这些原则,因为中间件可能需要额外的资源来维护状态,这会增加开销。
3. 可预测性:使用`scope`生命周期可能会使中间件的运行行为变得不可预测,因为它依赖于请求的生命周期,而请求的生命周期可能因各种原因而变化。
本文共计1071个文字,预计阅读时间需要5分钟。
为什么在中间件的构造函数里不能使用`scope`的生命周期类型呢?
在ASP.NET Core中,中间件的构造函数通常接收一个`IApplicationBuilder`参数,该参数允许你注册中间件。中间件的构造函数不应该使用`scope`的生命周期类型,原因如下:
1. 作用域限制:`scope`的生命周期类型通常用于依赖注入容器中,它表示一个请求的生命周期。在中间件的构造函数中使用`scope`生命周期可能会导致中间件在请求之间共享状态,这通常不是预期的行为,因为中间件应该是无状态的。
2. 设计原则:中间件的设计原则是轻量级和可复用。使用`scope`生命周期可能会违反这些原则,因为中间件可能需要额外的资源来维护状态,这会增加开销。
3. 可预测性:使用`scope`生命周期可能会使中间件的运行行为变得不可预测,因为它依赖于请求的生命周期,而请求的生命周期可能因各种原因而变化。

