Messenger.SendToTargetOrType и messageType key - PullRequest
0 голосов
/ 03 марта 2012

Допустим, я хочу отправлять / регистрировать сообщения типа Exception с определенным токеном.

Messenger.Default.Register(recipient, MessageType.RaiseException, action);
...
Messenger.Default.Send<Exception>(ex, MessageType.RaiseException);

Если ex имеет тип Exception, и я получаю производное исключение (например, InvalidOperationException), то сообщение никогда не будет доставлено, поскольку

if (_recipientsStrictAction.ContainsKey(messageType))

всегда будет возвращать false. Я неправильно использую Messenger, или это ошибка? Должен

Type messageType = message.GetType();

1010 * будет *

Type messageType = typeof(TMessage);

1 Ответ

0 голосов
/ 05 марта 2012

Используйте receiveDerivedMessages также, чтобы указать мессенджеру, что вы заинтересованы не только в конкретном типе сообщения, но и во всех типах сообщений, которые происходят от него.

Фактическая перегрузка для использования Регистром:

Register<TMessage>(
    object recipient, 
    object token, 
    bool receiveDerivedMessagesToo, 
    Action<TMessage> action
)

Таким образом, ваша регистрация должна выглядеть следующим образом:

Messenger.Default.Register(recipient, MessageType.RaiseException, true, action);
...