prism中共享服务的目的和用途是什么?
什么事情可以让我认为我必须使用共享服务而不是EventAggegator
?
prism中共享服务的目的和用途是什么?
什么事情可以让我认为我必须使用共享服务而不是EventAggegator
?
从EventAggregator
事件订阅者的角度来看,获得有关应用程序中发生的某些事件的通知非常有用。这样您就被动地执行操作,即每当其他人发布事件时。EventAggregator
当您需要对应用程序中发生的事情做出反应时,您想使用它。
另一方面,通过共享服务,您可以主动执行操作和请求数据。例如,您可以拥有一个公开方法的共享服务,并且您可以在需要时随时解析该服务并主动GetData()
请求数据。
我不知道其他人如何使用它,但我经常使用它来实现我的应用程序的模块化。例如在 Silverlight 应用程序中出于安全原因只能OpenFileDialog
返回Stream
文件。所以我只是构建了一个IOpenFileService
服务并将其插入到任何需要打开流到文件的 ViewModel 的构造函数中。它也适用于各种 Logger 甚至 Database 层。
服务的另一个有用部分是它们可以独立于其他模块构建和测试。MEF/Unity 将提供所有的粘合剂,以便在构造函数或其他对象的属性中插入现成的对象。
并且不要忘记服务类本身可以使用 MEF/Unity 魔法并将其他服务插入到自身中。
并且对于:您的代码可能很快就会EventAgregator
因各种定义而过载。Event
例如Resize
事件。在 Silverlight 应用程序初始化时,PRISMRegion
控件的过程很慢,因此它们Regions
被附加到VisualTree
很晚,并且不知何故他们错过了初始Resize
事件。我为(via )提供了内部Resize
事件,然后提供了另一个事件,每个控件将发送给它的子级以调整自己的大小以控制边界。仅用于调整大小的 2 个类...Region
EventAgregator
Resize
Region
Region
Event
我们两者都使用过,但当功能不仅仅是简单的通知时,通常会使用共享服务——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
.