關於事件分發器的認識
public IEventDispatcher dispatcher { get; set; }
------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------
情況一:
派發者(標籤):
[Inject(ContextKeys.CROSS_CONTEXT_DISPATCHER)]
監聽者(標籤):
[Inject(ContextKeys.CROSS_CONTEXT_DISPATCHER)]
觸發相應的事件
crossContextBridge.Bind(事件):多次觸發相應的事件(測試爲觸發4次)
[Inject(ContextKeys.CONTEXT_DISPATCHER)]
觸發相應的事件
crossContextBridge.Bind(事件):多次觸發相應的事件(測試爲觸發4次)
[Inject]
不觸發相應的事件
crossContextBridge.Bind(事件):不觸發相應的事件
結論:
通過 [Inject(ContextKeys.CROSS_CONTEXT_DISPATCHER)] 派發器派發的事件不需要 crossContextBridge.Bind(事件) 綁定,否者觸發相應事件多次。
------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------
情況二:
派發者(標籤):
[Inject(ContextKeys.CONTEXT_DISPATCHER)]
監聽者(標籤):
[Inject(ContextKeys.CROSS_CONTEXT_DISPATCHER)]
不觸發相應的事件
crossContextBridge.Bind(事件):觸發相應的事件
[Inject(ContextKeys.CONTEXT_DISPATCHER)]
不觸發相應的事件
crossContextBridge.Bind(事件):觸發相應的事件
[Inject]
不觸發相應的事件
crossContextBridge.Bind(事件):不觸發相應的事件
結論:
通過 [Inject(ContextKeys.CONTEXT_DISPATCHER)] 派發器派發的事件需要 crossContextBridge.Bind(事件) 綁定後纔可以被
帶 [Inject(ContextKeys.CROSS_CONTEXT_DISPATCHER)] 或 [Inject(ContextKeys.CONTEXT_DISPATCHER)] 的監聽者監聽到。
------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------
情況三:
派發者(標籤):
[Inject]
監聽者(標籤):
[Inject(ContextKeys.CROSS_CONTEXT_DISPATCHER)]
不觸發相應的事件
crossContextBridge.Bind(事件):不觸發相應的事件
[Inject(ContextKeys.CONTEXT_DISPATCHER)]
不觸發相應的事件
crossContextBridge.Bind(事件):不觸發相應的事件
[Inject]
不觸發相應的事件
crossContextBridge.Bind(事件):不觸發相應的事件
結論:
[Inject] 標籤的分發器只能自己發射,自己監聽,一般 View 發射事件,Mediator 注入 View,監聽方法寫到 Mediator 裏。
例如:view.dispatcher.AddListener(事件名, 事件處理方法)
------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------