プリズムでの共有サービスの目的と使用法は何ですか?
の代わりに共有サービスを使用する必要があると思わせるものは何EventAggegator
ですか?
プリズムでの共有サービスの目的と使用法は何ですか?
の代わりに共有サービスを使用する必要があると思わせるものは何EventAggegator
ですか?
イベント サブスクライバーの観点から見るEventAggregator
と、アプリケーションで発生する特定のイベントについて通知を受けるのに適しています。このようにして、操作を受動的に実行しています。つまり、他の誰かがイベントを公開するたびに. EventAggregator
アプリケーションで起こっていることに対応する必要がある場合に使用します。
一方、共有サービスを使用すると、アクティブに操作を実行してデータを要求できます。たとえば、GetData()
メソッドを公開する共有サービスを用意し、このサービスを解決して、必要なときにいつでも積極的にデータを要求できます。
他にどのように使用しているかはわかりませんが、アプリのモジュール性のためによく使用しました。たとえば、Silverlight アプリケーションでは、セキュリティ上の理由からのみファイルにOpenFileDialog
戻ることができました。Stream
そのため、IOpenFileService
サービスを構築し、ファイルへのストリームを開く必要がある任意の ViewModel にコンストラクターでプラグインしました。また、さまざまなロガーやデータベース層にも適しています。
サービスのもう 1 つの便利な部分は、他のモジュールから独立してビルドおよびテストできることです。MEF/Unity は、コンストラクターまたは他のオブジェクトのプロパティ内に準備完了のオブジェクトを挿入するためのすべての接着剤を提供します。
また、サービス クラス自体が MEF/Unity マジックを使用して、それ自体に他のサービスを挿入できることを忘れないでください。
そして for EventAgregator
: コードはさまざまなEvent
定義ですぐにオーバーロードされる可能性があります。例えばResize
イベント。Silverlight アプリの初期化では、PRISMRegion
コントロールのプロセスが遅いため、Regions
接続がVisualTree
非常に遅くなり、初期Resize
イベントが失われます。( 経由で)の内部Resize
イベントを提供し、次に各コントロールがその子に送信して、境界を制御するためにサイズを変更する別のイベントを提供しました。リサイズのためだけに2クラスです...Region
EventAgregator
Resize
Region
Region
Event
私たちは両方を使用しましたが、機能が単純な通知以上のものである場合は通常、共有サービスを使用EventAgregator
します。場合によっては、サービス内からも使用します。
たとえば、ドキュメントをスキャンするサービスがあります。
public interface IDocumentScannerService
{
}
public class DocumentScannerService : IDocumentScannerService
{
}
これを で実装しようとすると、かなり悪い設計になりEventAggregator
ます。