私はアーキテクチャ上の問題を抱えています (それに加えて、アプリケーションのコンテナとして使用されているキャッスル ウィンザーにあまり詳しくありません)。
作業単位の設計パターンを実装する Web アプリケーションがあります。 UnitOfWorkはIDisposableインターフェイスを実装します。
UnitOfWorkのDisposeメソッドで実行されるアクションに特に理由はありません(これらのアクションは、以前の時点で既に実行されています)。
また、すべてのコンポーネントは一時的なライフサイクルを使用してインスタンス化されています。
ほとんどすべてのコンポーネントはリポジトリ インスタンスも使用しています。これも一時的であり、IDisposableを実装しています (これも特に理由はありません)。
また、これらのコンポーネントのほとんどは、一部のデスクトップ アプリケーションでも使用されます。
私が遭遇した問題は、 IDisposableを実装する一時的なコンポーネントによるメモリ リークでした。 -根底にある力学/ .
また、Web アプリケーションからもクライアント アプリケーションからも、 Disposeが呼び出されないことに気付きました (実際には、コンポーネントでReleaseが呼び出されたときに呼び出されるより多くの投稿が見つかりました)。
( NoTrackReleasePolicyを使用せずに) メモリ リークの問題を修正する 1 つのオプションは、 IDisposableの実装を実際に削除することでした。しかし、これは NoTrackReleasePolicy を指定するのと似ていると思います。これは、メモリ リークよりもさらに大きな問題につながる可能性があります (方法はわかりませんが)。これが私の最初の質問です。
また、 Transientの代わりにPerWebRequestを指定してみましたが、この場合、Web request\context がないため、デスクトップ アプリケーションのコンポーネントの動作はどうなるでしょうか。それが私の 2 番目の質問です。
考慮したくないもう1つのことは、解決するすべてのコンポーネントに対してリリースを手動で呼び出すことです...
最も安全な\エレガントな\変更の少ない方法で問題を解決するアイデアは大歓迎です...