0

コントローラーに注入しているクラスに、コントローラーが破棄されたら破棄する必要があるアンマネージ リソースがいくつかあります (そうしないと、メモリ リークが発生します)。IUnityContainer を調べましたが、それを可能にする Release (または同様の) メソッドが見つかりませんでした。

いくつかの試行錯誤 (および読み取り) の後、Unity は作成した型について何が起こっているかを追跡していないように思えます。これは、Release を呼び出すことができ、オブジェクト グラフ全体が解放される Windsor とは大きく異なります。これは、実際には、そもそもコンテナーを持つことのポイントの 1 つです (オブジェクトのライフサイクル管理)。Dispose を直接呼び出す必要はありません。コンテナーは適切な順序/オブジェクトでそれを実行できるはずです。

ですから、私の質問は、オブジェクトが不要になり、破棄する必要があることを Unity に伝えるにはどうすればよいでしょうか?

それを行う方法がない場合、ライフサイクルを Web リクエストごとに変更する方法はありますか?

注意として、コンテナーの変更はオプションではありません。不運にも :(

4

1 に答える 1

0

Unity のさまざまなライフタイム マネージャーを確認する必要があります。ContainerControlledLifetimeManager は、作成するすべてのアイテムで dispose を呼び出します。残念ながら、このマネージャーは解決されたオブジェクトのシングルトンとして機能するため、適切ではない可能性があります。

もう1つの方法は、作成したオブジェクトを追跡し、コンテナが破棄されるとすべてのオブジェクトを破棄する独自のライフタイムマネージャーを作成することです。

于 2012-12-12T22:10:44.287 に答える