我發現articles約和solutions這個問題有關棱鏡,但我沒有找到任何有關Caliburn微。我檢查了全部這裏標記爲Caliburn.Micro
和EventAggregator
的問題,但沒有找到任何Caliburn關於這個看似基本問題的具體內容。如何使用Caliburn Micro的EventAggregator發送空事件(無有效載荷)?
場景:我想發佈事件到EventAggregator
沒有任何信息,除了表示發生了什麼事。
問題:首先,在Caliburn Micro中,EventAggregator
的Publish()
方法需要發送一個類型的實例。其次,訂閱和處理事件需要實現IHandle<T>
接口,其中T
是我們想要接收的實例類型。看起來這是完全圍繞發佈和處理實際數據而設計的。
目標:爲了能夠發佈簡單的事件,而無需創建和實例化多個空/空類,而不必,我需要用條件來進一步篩選Handle()
不必要的事件。
我的解決方案至今
這是我想提高/替換一下。 (顯然,這個解決方案是有問題的,因爲它在具體類上創建了更緊密的耦合,但在我的用例中,這不是一個大問題,因爲它是一個針對特定事件的單個發佈組件的小型項目,而EventAggregator服務於其他實際目標。)
我做了一個通用Signal<T>
類實現Singleton模式,通過Instance
財產提供其自身的靜態實例:
public class Signal<T>
{
public static readonly Signal<T> Instance = new Signal<T>();
private Signal() { }
}
所以我可以發佈按以下方式事件(SignalSourceClass
就是一個例子):
_eventAggregator.PublishOnUIThread(Signal<SignalSourceClass>.Instance);
並通過以下方式宣佈的IHandle<T>
執行處理事件:
IHandle<Signal<SignalSourceClass>>
這樣我可以送,並通過創建僅此單一Signal
類收到「空」事件。 (當然這是一個有限的解決方案,因爲組件只能以這種方式發送一個事件。)
我懷疑這個解決方案是原始的(好吧,讓我們把它稱爲事實),並且有更好的東西我俯視。
你希望有與事件相關聯的類型?我想你也可以發送「」。 _eventAggregator.PublishOnUIThread( 「」); –
是的,我想以某種方式識別事件,並以不需要在接收類中進行額外「if」檢查的方式實現IHandle和Handle()(例如,它們沒有接收到事件對他們沒用)。如果我可以使用事件的發件人,那在這個小型項目中是完美的。也許我應該嘗試裝飾EventAggregator類與額外的功能? –