3

プリズムでの共有サービスの目的と使用法は何ですか?

の代わりに共有サービスを使用する必要があると思わせるものは何EventAggegatorですか?

4

3 に答える 3

4

イベント サブスクライバーの観点から見るEventAggregatorと、アプリケーションで発生する特定のイベントについて通知を受けるのに適しています。このようにして、操作を受動的に実行しています。つまり、他の誰かがイベントを公開するたびに. EventAggregatorアプリケーションで起こっていることに対応する必要がある場合に使用します。

一方、共有サービスを使用すると、アクティブに操作を実行してデータを要求できます。たとえば、GetData()メソッドを公開する共有サービスを用意し、このサービスを解決して、必要なときにいつでも積極的にデータを要求できます。

于 2012-08-28T21:50:58.483 に答える
1

他にどのように使用しているかはわかりませんが、アプリのモジュール性のためによく使用しました。たとえば、Silverlight アプリケーションでは、セキュリティ上の理由からのみファイルにOpenFileDialog戻ることができました。Streamそのため、IOpenFileServiceサービスを構築し、ファイルへのストリームを開く必要がある任意の ViewModel にコンストラクターでプラグインしました。また、さまざまなロガーやデータベース層にも適しています。

サービスのもう 1 つの便利な部分は、他のモジュールから独立してビルドおよびテストできることです。MEF/Unity は、コンストラクターまたは他のオブジェクトのプロパティ内に準備完了のオブジェクトを挿入するためのすべての接着剤を提供します。

また、サービス クラス自体が MEF/Unity マジックを使用して、それ自体に他のサービスを挿入できることを忘れないでください。

そして for EventAgregator: コードはさまざまなEvent定義ですぐにオーバーロードされる可能性があります。例えばResizeイベント。Silverlight アプリの初期化では、PRISMRegionコントロールのプロセスが遅いため、Regions接続がVisualTree非常に遅くなり、初期Resizeイベントが失われます。( 経由で)の内部Resizeイベントを提供し、次に各コントロールがその子に送信して、境界を制御するためにサイズを変更する別のイベントを提供しました。リサイズのためだけに2クラスです...RegionEventAgregatorResizeRegionRegionEvent

于 2012-08-30T07:07:16.440 に答える
1

私たちは両方を使用しましたが、機能が単純な通知以上のものである場合は通常、共有サービスを使用EventAgregatorします。場合によっては、サービス内からも使用します。

たとえば、ドキュメントをスキャンするサービスがあります。

public interface IDocumentScannerService
{
}

public class DocumentScannerService : IDocumentScannerService
{
}

これを で実装しようとすると、かなり悪い設計になりEventAggregatorます。

于 2012-08-30T15:23:36.153 に答える