gpt4 book ai didi

c# - asp.net mvc 2 Controller 是如何实例化的?

转载 作者:太空狗 更新时间:2023-10-29 17:52:37 24 4
gpt4 key购买 nike

当 asp.net 应用程序收到 URL 通知时,它会将其路由到适当的 Controller ,特别是适当的方法。

这些 Controller 是否被放置在堆栈上一次?或者它们是否会针对每个请求再次实例化?

例如,假设我有一个带有 linq-to-sql 类的 Controller ,该类在类声明中实例化。如果我有 n 个路由到该 Controller 的请求,我是否生成了 n 个不同的 linq-to-sql 类对象,每个对象都在它们自己的 Controller 实例中,还是只有 1 个?

出于线程安全原因,我的直觉告诉我每个请求都会生成一个 Controller ,但我似乎找不到比我自己的胃肠神谕更好的指南了。

最佳答案

默认情况下,它们每次都由 DefaultControllerFactory 实例化。具体来说,在 GetControllerInstance 中,

(IController)Activator.CreateInstance(controllerType);

CreateController 首先被调用,它调用 GetControllerType 以根据 Controller 名称和路由数据 token 中传递的命名空间获取 Controller 类型。然后它调用 GetControllerInstance 创建 Controller 的实例。

没有比 MVC framework source code itself 更好的指南了.

您可以通过实现 IControllerFactory 来定义自己的 ControllerFactory,然后控制实例化 Controller 的方式和时间。

关于c# - asp.net mvc 2 Controller 是如何实例化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3991067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com