0

現在、将来のプロジェクトで Ninject を使用できるかどうかを評価しています。1 つの条件は、ライブラリが Dispose メソッドの呼び出しを強制してはならないということです。それで、それは本当に必要ですか?それを呼び出さないと、メモリリークやその他の醜いものが発生しますか?

4

2 に答える 2

3

純粋に管理されたソリューションである Ninject は、Dispose() を呼び出さなければ、メモリ リークやその他の問題が発生するとは思いません。特に、アプリケーションを終了する前に行う最後の処理の 1 つとしてカーネルの Dispose() メソッドを呼び出すだけなので、いずれにせよ GC または OS のプロセス分離によってメモリが回収されます。

Dispose() を呼び出すことができる IoC コンテナーが必要な理由は、IDisposable を実装しているすべてのサービス プロバイダーで Dispose() を呼び出すためです。サービス プロバイダーは、管理されていないリソースを所有している場合や、非同期操作が完了するまで待機する必要がある場合があるため (または、少なくともそれらを適切な方法で中止する必要がある場合)、これは便利な機能だと思います。

これが、カーネル/プロバイダー/ロケーター クラスに IDisposable を実装するほとんどの IoC コンテナーの背後にある理由であると私は確信しています。

IoC コンテナーで Dispose() を使用することが問題になるのはなぜですか? これまでのところ、コンソール アプリケーション、XAML ベースの WPF アプリケーション、Xbox ゲームなど、呼び出すのに適切な場所を常に見つけてきました。

于 2012-05-25T12:28:00.390 に答える
3

Dispose に役立つように Ninject を構成できます。それは、Ninject で使用するスコープ戦略によって異なります。例えば:

于 2012-05-25T15:09:21.623 に答える