1. ホーム
  2. asp.net-mvc

[解決済み] ASP.Net MVC Controller のコンストラクタでセッションを NULL にする

2023-04-06 21:31:09

質問

コントローラのコンストラクタでSessionがNULLになっているのはなぜですか?Actionメソッドからアクセスすることができます。おそらく、MVC RoutingフレームワークがControllerの新規作成を担当するため、その時点ではSessionを(再)インスタンス化していないだけだと思われます。

これが設計によるものかどうか、もしそうなら、なぜなのか、誰か知っていますか?

[私は Lazy Loading Pattern を使って、この問題を回避することに成功しました] 。

どのように解決するのですか?

ASP.NET MVC フレームワークで実行する場合、HttpContext (および HttpContext.Session) は期待どおりにコントローラクラスが構築されるときには設定されず、後で ControllerBuilder クラスによって設定 ("injected") されるので null となるのです。もし、ライフサイクルをより深く理解したいのであれば、ASP.NET MVCフレームワーク(ソースは入手可能です)をプルダウンするか、または、以下を参照してください。 このページ

もしSessionにアクセスする必要があるなら、一つの方法は "OnActionExecuting"メソッドをオーバーライドして、そこにアクセスすることです。

しかし、Andreiが提案しているように、もしあなたのコードがSessionに依存しているなら、ユニットテストを書くのは潜在的に難しいかもしれません。したがって、ヘルパークラスでSessionをラップし、ユニットテストの下で実行するときに別の非ウェブバージョンにスワップできるようにすることを考えることができます。