2011-05-25 138 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