.net 项目中控制器的范围是什么?

var*_*ble 1 .net-6.0

我创建了一个新的 Web api 项目,并且还有带有 GET 方法的 WeatherForecast 控制器。

我想问 - 控制器类的范围是什么?

由于我没有找到控制器的任何依赖注入设置,它是默认的单例还是作用域?

Pan*_*vos 6

自 ASP.NET MVC 1.0 以来,所有 ASP.NET 堆栈中控制器的范围都是请求 - ASP.NET 中间件创建一个新的控制器实例来处理每个请求。

ASP.NET Core 中间件管道相当,控制器实例仅在中间件的最后阶段创建Endpoint

在此输入图像描述

它们的控制器和处理请求的操作是User Code端点管道中的框

在此输入图像描述

您必须假设在操作方法完成处理请求后控制器将很快被处理。此后从任何其他类(甚至其他作用域类)访问控制器实例都是不安全的。

如果你想共享数据,你必须将其存储在其他地方,例如会话、缓存、使用常见的选项对象、单例字典(本质上是缓存)、数据库等。