使用共享服务PRISM的目的

时间:2012-08-27 21:48:43

标签: prism communication prism-4 eventaggregator

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

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

3 个答案:

答案 0 :(得分:4)

从事件订阅者的角度来看EventAggregator,有助于获得有关应用程序中发生的某些事件的通知。这样,您就可以执行被动操作,即每当其他人发布活动时。当您需要对应用程序中发生的事情作出反应时,您希望使用EventAggregator

另一方面,使用共享服务,您可以主动执行操作和请求数据。例如,您可以拥有一个公开GetData()方法的共享服务,您可以随时解决此服务并请求数据主动

答案 1 :(得分:1)

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

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

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

对于EventAgregator:您的代码很快就会被各种Event定义重载。例如Resize事件。在Silverlight应用初始化时,PRISM Region控件的进程很慢,因此Regions很晚就附加到VisualTree,并且他们错过了最初的Resize事件。我提供了Resize的内部Region事件(通过EventAgregator),然后是另一个Resize事件,每个Region控件将发送给它的孩子调整自己的大小Region控制边界。这只是2 Event个类,只适用于Resize ......

答案 2 :(得分:1)

我们已经使用过两者,但通常在功能不仅仅是一个简单的通知时使用共享服务 - 在某些情况下我们也会在我们的服务中使用EventAgregator

例如,我们有一个扫描文档的服务:

public interface IDocumentScannerService
{
}

public class DocumentScannerService : IDocumentScannerService
{
}

尝试使用EventAggregator实现此功能将是一个非常糟糕的设计。