3

prism中共享服务的目的和用途是什么?

什么事情可以让我认为我必须使用共享服务而不是EventAggegator

4

3 回答 3

4

EventAggregator事件订阅者的角度来看,获得有关应用程序中发生的某些事件的通知非常有用。这样您就被动地执行操作,即每当其他人发布事件时。EventAggregator当您需要对应用程序中发生的事情做出反应时,您想使用它。

另一方面,通过共享服务,您可以主动执行操作和请求数据。例如,您可以拥有一个公开方法的共享服务,并且您可以在需要时随时解析该服务并主动GetData()请求数据。

于 2012-08-28T21:50:58.483 回答
1

我不知道其他人如何使用它,但我经常使用它来实现我的应用程序的模块化。例如在 Silverlight 应用程序中出于安全原因只能OpenFileDialog返回Stream文件。所以我只是构建了一个IOpenFileService服务并将其插入到任何需要打开流到文件的 ViewModel 的构造函数中。它也适用于各种 Logger 甚至 Database 层。

服务的另一个有用部分是它们可以独立于其他模块构建和测试。MEF/Unity 将提供所有的粘合剂,以便在构造函数或其他对象的属性中插入现成的对象。

并且不要忘记服务类本身可以使用 MEF/Unity 魔法并将其他服务插入到自身中。

并且对于:您的代码可能很快就会EventAgregator因各种定义而过载。Event例如Resize事件。在 Silverlight 应用程序初始化时,PRISMRegion控件的过程很慢,因此它们Regions被附加到VisualTree很晚,并且不知何故他们错过了初始Resize事件。我为(via )提供了内部Resize事件,然后提供了另一个事件,每个控件将发送给它的子级以调整自己的大小以控制边界。仅用于调整大小的 2 个类...RegionEventAgregatorResizeRegionRegionEvent

于 2012-08-30T07:07:16.440 回答
1

我们两者都使用过,但当功能不仅仅是简单的通知时,通常会使用共享服务——EventAgregator在某些情况下,我们也会在服务中使用。

For example we have a service for scanning in documents :

public interface IDocumentScannerService
{
}

public class DocumentScannerService : IDocumentScannerService
{
}

This would be a pretty bad design to try and implement this with EventAggregator.

于 2012-08-30T15:23:36.153 回答