2011-05-25 161 views
9

近期有關ASP.NET MVC爲其控制器方法不使用靜態方法的討論。雖然我使用靜態方法在之間,但對於非靜態操作方法,我只能考慮2個參數是inheritence和模擬(這是繼承給你的)的能力。ASP.NET MVC控制器靜態方法

微軟對非靜態動作/靜態方法的設計選擇是什麼?

回答

26

雖然我不知道那些在這裏設計了ASP.NET MVC框架的心目中是一個大我:

實例控制器每個請求實例化一次,多個請求可以同時發生。如果控制器是靜態的,那麼控制器上的任何狀態將同時在所有請求之間共享。你可能不希望這樣。更新該共享狀態成爲鎖定爭用,可能的死鎖和如果鎖定未正確實現時很難跟蹤錯誤的雷區。

總之,一個靜態控制器將是一個噩夢。

+0

我不確定你是否真的定義了任何理由。你只是解釋了爲什麼Web環境中的靜態會導致意外的行爲。 – 2011-05-25 20:43:38

+10

當然,它可以「導致意外行爲」的事實是沒有將它們用作ASP.NET MVC框架的一部分的有效理由。我的答案當然是,正如我所指出的,由於我不瞭解創建框架的人的思想,所以我的答案是推測性的。但是,它仍然是一個潛在的原因。 – 2011-05-25 21:46:18

+1

+1這是現貨。 – Fenton 2011-11-09 11:50:04