棱镜中共享服务的目的和用途是什么?
哪些事情可以让我认为我必须使用共享服务而不是EventAggegator
?
答案 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
实现此功能将是一个非常糟糕的设计。