3

オブジェクトキャッシュから単一のインスタンスを削除する方法を知っている人はいますか?StructureMapを使用してインスタンスを取得するクラスがあります。ある時点でインスタンスが無効になる可能性があるため、インスタンスをキャッシュから削除して、次に呼び出すときにObjectFactory.GetInstance、新しく作成されたインスタンスを取得できるようにします。これは、さまざまな種類のライフサイクルで機能するはずです。

そのタイプのすべてのインスタンス、または他のタイプの他のインスタンスを削除したくありません。

4

1 に答える 1

1

破損のために登録済みサービスのインスタンスを新しいものに置き換える必要がある場合、これは通常、インスタンスの寿命が長すぎることを示しています。AさんDataContextがいい例です。ADataContextはスレッドセーフではないため、それが作成された (Web) リクエストよりも長く存続するべきではありません。Web アプリケーションを扱っていない場合でも、通常、操作するある種のリクエストがあり、各リクエストは独自のDataContextインスタンスを取得します。

例外が発生した場合は、通常、操作全体をできるだけ早く中止する必要があります。回復して継続しようとすることは、一般的にほとんどの場合悪いことだと考えられています。これは一般的なソフトウェアの原則であり、DI とは関係ありません。ほとんどの場合、何がうまくいかなかったのか正確にはわかりません。続行すると事態が悪化することさえあります。続行しても、アプリケーションがより堅牢になるわけではありません。バグを見つけるのがずっと難しくなるだけです。

簡単に言うDataContextと、単一のリクエストの存続期間中は最大でも a をキャッシュする必要があり、例外が発生したときにそれを置き換えようとしないでください。リクエストを失敗させてください (そして、バグを見つけて修正するために必要なすべての情報をログに記録してください)。

ASP.NET アプリケーションを実行している場合は、DataContextインスタンスを として構成できますHttpContextScoped

于 2012-11-25T21:48:34.867 に答える