2013-07-18 10 views
7

MVCについての私の理解の中には致命的な欠陥があると思います。私はいつもコントローラのアクションメソッドはステートレスであり、コントローラ自体はステートレスであると仮定してきました。アクションはステートレスですが、コントローラはステートレスですか?

したがって、アクションが呼び出されるたびにコントローラの新しいインスタンスが作成されますか?

+2

はい、コントローラーはオブジェクトです... IISはオンデマンドサーバーです。アクション実行後、コントローラオブジェクトが破棄されます。 – YD1m

答えて

4

コントローラの新しいインスタンスが入ってくるすべての要求のために作成され、この考えてみます。

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return MoreIndex(); 
    } 

    public ActionResult MoreIndex() 
    { 
     return View(); 
    } 
} 

/Home/Indexのために入ってくる要求は二つの動作に入りますが、一つだけのコントローラが作成されます。 /Home/MoreIndexの要求が1つのアクションに入り、1つのコントローラが作成されます。これで、コントローラを手作業で作成し、そのまま使用して再使用することはできません。しかし、HTTPからの実際の要求との関連では決してありません。

+1

このページには便利な情報が掲載されています:http://blog.christopheargento.net/2012/06/11/detailed-life-cycle-of-an-asp-net-mvc-request/ –

1

コントローラーに状態があることは全く合理的です。私は通常、共通のコントローラベースクラスからデータベース接続を参照します。そのため、MVCは要求ごとに新しいコントローラを作成し、最後に適切に処理します。

関連する問題