有幾天沒有寫博客了. 今天接着之前的部分繼續寫,模塊間的通訊。在Prism框架中,我目前總結出來的模塊間的通訊主要有兩種。一種是基於接口的通訊,主要是使用UnityContainer的Resolve方法在模塊外,獲取模塊內部的接口。然后通過接口向該模塊傳遞數據或調用其方法,也可以注冊其事件。這是一種弱藕合的通訊方式,因為兩個模塊之間都需要引用同一個接口。另一種通訊方式是使用Prism框架中的IEventAggregator來實現。該方式可以實現模塊間的完全解藕,所以在此重要講述。
IEventAggregator 從字面上看,他是一個事件聚合器。它將某一類型的事件注冊到EventAggregator的靜態集合中。在整個應用程序域中,供所有模塊共享。其中一個事件觸發,所有訂閱了該事件的模塊,都能接收到。
使用 IEventAggregator訂閱事件的方法:
3 eventAggregator.GetEvent<CompositePresentationEvent< string>>();
4
5 evt.Subscribe(OnEventExecuted);
上面代碼中的 eventAggregator是Prism框架在Bootstrapper的初始化中創建的,通過上面代碼所在的類的構造函數傳入。 Subscribe方法的作用是訂閱事件,並且該事件的委托的格式只有一個string類型的型參( CompositePresentationEvent<string> )。當事件被觸發后,當前模塊中的OnEventExecuted方法被調用。
使用IEventAggregator觸發事件的方法:
3 eventAggregator.GetEvent<CompositePresentationEvent< string>>();
4
5 evt.Publish( " 需要傳遞的內容 ");
上面的這段代碼與前一段類似, eventAggregator是Prism框架在Bootstrapper的初始化中創建的一個靜態對象。通過上要代碼所在類的構造函數傳入。Publish方法的作用是觸發事件。事件觸發后,所有訂閱過該事件的模塊都會收到該事件而作出相應的響應。 "需要傳遞的內容" 是事件觸發時,傳遞的參數。將會被所有的模塊接收到。通過使用 IEventAggregator 即可完成模塊間的數據傳遞。並且模塊之間完全解藕。
接下來,我將繼續償試和學習通過一個Region中的Module去控制另一個Region去加載指定的View。以此結束本階段的Prism學習。謝謝大家的支持。