2009-08-10 6 views
6

機能的な理由でスコープを制御する必要がある以外(例えばシングルトン)、デフォルトスコープ(一時的?)から別のものに切り替える理由はありますか?Structuremapスコープ/ライフサイクルガイダンス?

デフォルトのスコープを使用すると、すべてのプラグインタイプのすべてのデフォルトインスタンスが効果的に各リクエスト(Webアプリケーションを前提とする)でインスタンス化されます。これはパフォーマンスに顕著に影響しますか?

私は、これをログインユーザーあたり1つのインスタンスに制限するためにHttpセッションスコープを使用することを検討しました。しかし、各プラグインタイプのインスタンスが常に各ユーザーのメモリに格納されます。デフォルトスコープを使用すると、これらのインスタンスは、ページ要求が処理されている間だけメモリに保持されます。私はどちらが好ましいか分からない。

StructureMapを使用する場合、どのようにして各プラグインタイプのスコープを一般的に設定しますか?任意の洞察力のための

おかげで、

フィル

答えて

7

私は場所にデフォルトのスコープを残します。これは、1人の要求ごとに(各ユーザーまたは多数のユーザーのいずれかによって)私は手元にあるオブジェクトのインスタンスを持っていることを意味します。つまり、毎回新しいリクエストが行われます。セッションでそれを維持することは、私がより具体的なコントロールを持つことを好むものです。このため、私はサービス層の上にキャッシング層を投げて、StructureMapが返したオブジェクトを貼り付けるかもしれません。私はすでにインスタンス化された(今はシリアル化された)オブジェクトのキャッシュを照会し、オブジェクトをどこから取得するかを選択できます。

実際のオブジェクトを取得するためにStructureMapを使用するシングルトン構成でも同じことをしますが、2回目にオブジェクトを返すと、オブジェクト自体がインスタンスをハンドオフします(つまりシングルトンの言葉で)。これはPowerMapのためにStructureMapを使用しますが、必要以上の力は与えません。

+0

あなたの思いやりのある応答に感謝します。あなたのシングルトンを取り上げるのは面白いですし、私もそれを考慮に入れます。 –