0

Prism と MVVM パターンを使用しています

次のように、コンテナーに登録されているリポジトリでサービスを実行しています。

_container.RegisterType<ITheService, TheService>();
_container.RegisterType<IRepository<Order>, Repository>(new ContainerControlledLifetimeManager());

リポジトリのコンストラクターはサービスにサブスクライブし、新しい要素 (毎秒 5 ~ 10 など) を受け取ります。問題は、このサブスクリプションが原因で、GUI のウィンドウを閉じると、サービスを保持しているモジュールが閉じられず、破棄によってシャットダウンされるのではなく、サービスが実行され続けることです。

私がMVVMにいなかった場合、ウィンドウを閉じるときにサービスの登録を解除するだけですが、シェルウィンドウではそれができません。

私は2つの解決策を見ます *シェルが閉じたときにリポジトリに通知するイベントアグリゲータを持っており、サービスのサブスクライブを解除します(ただし、それが機能するかどうかはわかりません) *シェルからリポジトリを解決し(シングルトンとして登録されているため)、サブスクライブを解除しますサービスのとき、しかしそれは非常に醜いでしょう....

4

1 に答える 1

0

そこで、EventAggregator を使用する最初のアイデアを試しました。

Closed イベントが発生すると、シェルは EventAggregator でイベントを発行します。サービスを保持しているリポジトリはそのイベントをサブスクライブしており、シェルが閉じたときに通知を受け取ります。そのため、通知を受け取ったらサービスを終了する必要があります...

于 2012-11-07T03:02:00.683 に答える