1

私のビューモデルの1つに、ServiceControllerへの参照が含まれています。このビューモデルにIDisposableを実装しました。今、私は他のいくつかのviewModelでこのビューモデルのリストを作成しています。他のビューモデルにIDisposableを実装する必要がありますか?

4

2 に答える 2

2

これを一歩バックアップして、ビューモデルがServiceControllerへのこの参照をどのように取得するかを尋ねます。依存関係として注入していますか?ServiceControllerの寿命はViewModelよりも長いですか?ViewModelがそれを作成している場合、Disposableは理にかなっていますが、この依存関係を注入している場合、または「ViewModelA」のインスタンス間で何らかの形で共有されている場合は、ServiceControllerを破棄するのはそのクラスに任されるべきではありません。 。つまり、他の場所で合法的にスコープ内にある可能性のあるオブジェクトに対してDispose()を呼び出すことは意味がありません。

ただし、これが理にかなっていると仮定すると(VMのリストが内部でServiceControllerを作成している場合)、ViewModelBがIDisposableを実装する必要があるかどうかは、ViewModelAインスタンスの存続期間によって異なります。これらがクラスレベルの変数として永続化されている場合は、はい、おそらく、VMBのIDisposableにそれらを破棄する必要があります。それらがメソッドで作成、使用、破棄される場合は、必要ありません。

IDisposableについて推論することは、実際にはオブジェクトの存続期間を考慮することです。解放する必要があるが、インスタンスの存続期間中は保持されるリソースがある場合に意味があります。そして、これが発生した場合は、作成したのと同じスコープでDispose()を呼び出す必要があります(多くの場合、Ashishが「using」キーワードを使用して言及しています)。

于 2012-06-29T04:23:33.247 に答える
1

ViewModelA-IDisposableを実装します

ViewModelB-ViewModelAのリストがあります

ViewModelBでIDisposableを実装する必要はないと思います。これは、ViewModelBでそのリストを使用する場合は常に、サービスコントローラーを破棄するためにIDisposableを既に実装しているViewModelAオブジェクトを操作するためです(たとえば、「 "ブロック)。

于 2012-06-29T03:32:53.810 に答える