簡體   English   中英

asp.net mvc 2控制器是如何實例化的?

[英]How are asp.net mvc 2 controllers instantiated?

當一個asp.net應用程序收到URL通知時,它會將它路由到適當的控制器,特別是相應的方法。

這些控制器是否一次放在堆棧上? 或者他們是否為每個請求再次實例化?

例如,假設我有一個帶有linq-to-sql類的控制器,它可以在類的聲明中實例化。 如果我有n個請求路由到該控制器,我是否已經生成了n個不同的linq-to-sql類對象,每個對象都在自己的控制器實例中,或者只有1個?

我的直覺告訴我,出於線程安全原因,每個請求都會產生一個控制器,但我似乎無法挖掘出比我自己的胃腸道更好的指導。

默認情況下,它們每次都由DefaultControllerFactory實例化。 具體來說,在GetControllerInstance

(IController)Activator.CreateInstance(controllerType);

首先調用CreateController ,調用GetControllerType以根據控制器名稱和路徑數據標記中傳遞的命名空間獲取控制器類型。 然后它調用GetControllerInstance ,它創建一個控制器的實例。

沒有比MVC框架源代碼本身更好的指導。

您可以通過實現IControllerFactory來定義自己的ControllerFactory,然后控制實例化控制器的方式和時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM