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学习。谢谢大家的支持。 

  • 相关阅读:
    面向对象三大特性?
    final finally finalize区别?
    LeetCode122-买卖股票的最佳时机2(贪心算法)
    LeetCode119-杨辉三角2(题目有Bug,动态规划)
    九度OJ 1051:数字阶梯求和 (大数运算)
    九度OJ 1050:完数 (数字特性)
    九度OJ 1049:字符串去特定字符 (基础题)
    九度OJ 1048:判断三角形类型 (基础题)
    九度OJ 1047:素数判定 (素数)
    九度OJ 1046:求最大值 (基础题)
  • 原文地址:https://www.cnblogs.com/prolove2/p/2441556.html
Copyright © 2011-2022 走看看