私が書いているこのアプリケーションがありますが、そのサイズのために組織の面で少し惨事になっています。これは、StructureMap v3.1.4.143 を使用して IoC を実装するための理想的な候補になると考えました。
Program.cs でオブジェクト グラフを設定し、コンストラクターでいくつかの依存関係を取得するアプリケーション コンテキストを作成しています。それらの 1 つは、スプラッシュ スクリーン フォームです。アプリ コンテキストが実行されると、このフォームが表示され、初期化時の状況に応じてフォームの現在のステータスが更新されます。
このオブジェクトは非常に一時的なものであり、一度破棄すると、StructureMap はそれをどう処理するのでしょうか? なんらかの方法でオブジェクトをキャッシュしますか? 実際にオブジェクトが何らかの方法でキャッシュされている場合、オブジェクトをルート化して破棄したままにするのは無駄に思えます。ネストされたコンテナを使用する必要がありますか? コンテナーを管理できる場合は、コンテナーを渡さないようにしています。アプリケーション コンテキストは、Application.Run (モーダル) を呼び出すときに、このオブジェクトを破棄する必要があります。では、この状況を処理する良い方法はありますか? オブジェクトが使用されなくなったときに GC から到達できないオブジェクトをぶらぶらしたままにしたくないのです。
これにより、別の設計上の問題が発生する可能性があります。ボタンをクリックして、新しいフォームが作成され、操作され、破棄された場合、StructureMap を介してこれをどのように処理しますか? 実行時にフォームを作成する必要があり、オンデマンドでのみ作成する必要があります。また、ユーザーが使い終わった後もそれを保持したくありません (無駄だと思います)。フォームを破棄し、StructureMap によって注入されたファクトリ メソッドを使用して新しいインスタンスを作成すると、以前のインスタンスが破棄された状態で返されますか?
そして、これを邪魔にならないようにするために、フォームを閉じるときに「非表示」にすることは、ここではオプションではありません。
これは、私が確かに慣れていない、本当に別の考え方です。そのため、ご指導をいただければ幸いです。