MVCについての私の理解の中には致命的な欠陥があると思います。私はいつもコントローラのアクションメソッドはステートレスであり、コントローラ自体はステートレスであると仮定してきました。アクションはステートレスですが、コントローラはステートレスですか?
したがって、アクションが呼び出されるたびにコントローラの新しいインスタンスが作成されますか?
MVCについての私の理解の中には致命的な欠陥があると思います。私はいつもコントローラのアクションメソッドはステートレスであり、コントローラ自体はステートレスであると仮定してきました。アクションはステートレスですが、コントローラはステートレスですか?
したがって、アクションが呼び出されるたびにコントローラの新しいインスタンスが作成されますか?
コントローラの新しいインスタンスが入ってくるすべての要求のために作成され、この考えてみます。
はpublic class HomeController : Controller
{
public ActionResult Index()
{
return MoreIndex();
}
public ActionResult MoreIndex()
{
return View();
}
}
/Home/Index
のために入ってくる要求は二つの動作に入りますが、一つだけのコントローラが作成されます。 /Home/MoreIndex
の要求が1つのアクションに入り、1つのコントローラが作成されます。これで、コントローラを手作業で作成し、そのまま使用して再使用することはできません。しかし、HTTPからの実際の要求との関連では決してありません。
このページには便利な情報が掲載されています:http://blog.christopheargento.net/2012/06/11/detailed-life-cycle-of-an-asp-net-mvc-request/ –
コントローラーに状態があることは全く合理的です。私は通常、共通のコントローラベースクラスからデータベース接続を参照します。そのため、MVCは要求ごとに新しいコントローラを作成し、最後に適切に処理します。
はい、コントローラーはオブジェクトです... IISはオンデマンドサーバーです。アクション実行後、コントローラオブジェクトが破棄されます。 – YD1m