S#arp アーキテクチャをご覧ください。これは、NHibernate をラップし、これと他の機能を提供するフレームワークです。これは、Castle Windsor や Ninject などの依存性注入コンテナーでも実行できます。(S#arp は Castle Windsor を使用しています)。
これを自分で行う場合はHttpModule
、各 Web 要求の開始時と終了時にセッションを開いたり閉じたりする を作成する必要があります。リクエストの開始時に、モジュールはセッションを開き、HttpContext.Items
Web リクエストごとのストレージである にそれを隠します。リポジトリは、リクエストの処理中にここからセッションを取得します。(クリーンな設計のためにISessionManager
、リポジトリが使用するインターフェースと、リクエストごとのストレージにアクセスする実装を作成します。そうすれば、単体テストが可能になります。)最後に、モジュールはリクエストの最後にセッションをフラッシュして閉じます。これは NHibernate プロジェクトで 1 回行いましたが、教育的なものでしたが、大変な作業でした。
S#arp は、多くのアプリケーション構造を決定する大きなフレームワークです。そこまで行きたくない場合は、Castle Windsor を見て、これをきれいに抽象化してください。必要なのは (多かれ少なかれ) コンテナーを構成して、要求ごとの NHibernate セッション オブジェクトをコンストラクター パラメーターとして使用してリポジトリーをインスタンス化することだけです。本当に方法を知りたい場合は、独自の HttpModule を構築してください。ただし、運用環境でフレームワークを使用することをお勧めします。