• Prism学习(8)模块间通讯


    有几天没有写博客了. 今天接着之前的部分继续写,模块间的通讯。在Prism框架中,我目前总结出来的模块间的通讯主要有两种。一种是基于接口的通讯,主要是使用UnityContainer的Resolve方法在模块外,获取模块内部的接口。然后通过接口向该模块传递数据或调用其方法,也可以注册其事件。这是一种弱藕合的通讯方式,因为两个模块之间都需要引用同一个接口。另一种通讯方式是使用Prism框架中的IEventAggregator来实现。该方式可以实现模块间的完全解藕,所以在此重要讲述。

     IEventAggregator 从字面上看,他是一个事件聚合器。它将某一类型的事件注册到EventAggregator的静态集合中。在整个应用程序域中,供所有模块共享。其中一个事件触发,所有订阅了该事件的模块,都能接收到。

    使用 IEventAggregator订阅事件的方法:

    2             CompositePresentationEvent<string> evt =
    3                 eventAggregator.GetEvent<CompositePresentationEvent<string>>();
    4 
    5             evt.Subscribe(OnEventExecuted);

     上面代码中的 eventAggregator是Prism框架在Bootstrapper的初始化中创建的,通过上面代码所在的类的构造函数传入。 Subscribe方法的作用是订阅事件,并且该事件的委托的格式只有一个string类型的型参( CompositePresentationEvent<string> )。当事件被触发后,当前模块中的OnEventExecuted方法被调用。

    使用IEventAggregator触发事件的方法:

    2             CompositePresentationEvent<string> evt =
    3                 eventAggregator.GetEvent<CompositePresentationEvent<string>>();
    4 
    5             evt.Publish("需要传递的内容");

    上面的这段代码与前一段类似, eventAggregator是Prism框架在Bootstrapper的初始化中创建的一个静态对象。通过上要代码所在类的构造函数传入。Publish方法的作用是触发事件。事件触发后,所有订阅过该事件的模块都会收到该事件而作出相应的响应。 "需要传递的内容" 是事件触发时,传递的参数。将会被所有的模块接收到。通过使用 IEventAggregator 即可完成模块间的数据传递。并且模块之间完全解藕。


    接下来,我将继续偿试和学习通过一个Region中的Module去控制另一个Region去加载指定的View。以此结束本阶段的Prism学习。谢谢大家的支持。 

  • 相关阅读:
    Lambda
    Thread&线程池
    异常
    Map
    List and Set
    Collection和迭代器Iterator
    Object类,常用API
    (一)自定义 mybatis 之框架介绍
    Nginx三大功能及高并发分流
    http协议改为https
  • 原文地址:https://www.cnblogs.com/prolove2/p/2441556.html
Copyright © 2020-2023  润新知