6

真のsession-pr-request動作でRavenDBIDocumentSessionをリポジトリに取り込むために使用する正しいメカニズムに関するアドバイスを探しています。

これはグリーンフィールドMVC3アプリケーションであり、NuGetを使用してNinject/Ninject.MVC3を取得しました。RavenDBは外部サーバーで実行されています(つまり、埋め込まれていません)。

適切なリポジトリを返すようにNinjectモジュールを設定し、リクエストごとにセッションを設定しました。

しかし-MVC3が各アクションメソッドのコントローラーをインスタンス化するというのは本当ですか?その場合、MVC3 / Ninjectにリポジトリと必要なセッションを注入させるだけで、問題ありません。

ただし、コントローラーが複数のリクエストで再利用される場合、以前のリクエストからぶら下がっているリポジトリが古いセッションを使用して破棄される可能性があるため、これは機能しない可能性があります。

私はこれを行うためのいくつかの方法を見てきました-上記は基本的な方法です。また、各リクエストの開始時にIoCコンテナから新しいセッションを取得するActionFilterAttributeのようなことを試みましたが、その場合、どこに配置する必要がありますか?

リポジトリには、コンテナから現在のセッションを毎回実際に取得するSessionプロパティが必要ですか?これにより、リポジトリの実装とIoCコンテナの間に結合が追加されますが、それ以外の場合は機能するはずです。

これを行うための適切な方法は何ですか?かっこいい子供たちはどうやってやってるの?どんな助けでも大歓迎です!

4

3 に答える 3

12

コントローラファクトリで本当に面白いことをしているのでない限り、各コントローラインスタンスは単一のリクエストに使用されます。コントローラはスレッドセーフではなく、通常、単一のリクエストを超えて存続することはありません。

于 2011-06-19T15:28:52.160 に答える
3

リクエストごとに1回注入されるInRequestScopeように、Ninjectの使用に関する包括的なブログ投稿を作成しました。IDocumentSessionNinjectは、スコープの管理に優れています。

http://www.dalsoft.co.uk/blog/index.php/2012/04/12/mvc-get-ravendb-up-and-running-in-5-minutes-using-ninject/

于 2012-04-16T08:21:49.663 に答える
-1

私はあなたがコントローラーを続けることを避けるべきだと思います。

それはいつか役立つかもしれません:セッション状態が無効になっている場合、それはnullになるので、コントローラーのセッションプロパティを使用しようとしないでください。セッション状態をオフにしてSessionプロパティを使用すると、恐ろしい「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生します。

于 2011-06-19T15:33:03.260 に答える