zoukankan      html  css  js  c++  java
  • 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学习。谢谢大家的支持。 

  • 相关阅读:
    PostgreSQL中的partition-wise join
    Partition-wise join
    外观模式 门面模式 Facade 结构型 设计模式(十三)
    桥接模式 桥梁模式 bridge 结构型 设计模式(十二)
    组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)
    创建型设计模式对比总结 设计模式(八)
    原型模式 prototype 创建型 设计模式(七)
    单例模式 创建型 设计模式(六)
    建造者模式 生成器模式 创建型 设计模式(五)
    抽象工厂模式 创建型 设计模式(四)
  • 原文地址:https://www.cnblogs.com/prolove2/p/2441556.html
Copyright © 2011-2022 走看看