2011-12-12 15 views
5

Ho appena aggiornato la mia applicazione SL4 a SL5. Ho scaricato il sorgente MVVM light toolkit per SL 5 e lo ho creato: http://mvvmlight.codeplex.com/SourceControl/changeset/changes/17256019ad97Messaggi luce MVVM interrotti dopo l'aggiornamento SL5?

Inizialmente tutto funziona correttamente, ma la messaggistica di GalaSoft è in qualche modo interrotta. Il messaggio viene inviato, ma non viene mai rilevato dal destinatario (utilizzando Messenger.Default.Register). Nessun avviso di costruzione/errore e nessun errore nella finestra di output.

Qualcuno è a conoscenza di eventuali modifiche irrisolte in relazione al nuovo aggiornamento MVVM Light SL5?

/Thomas

+3

Potete inviarmi una replica a laurent (at) galasoft (punto) ch, voglio indagare. Grazie! – LBugnion

+0

Sto utilizzando l'ultima MVVM light 3 dal programma di installazione con Silverlight 5 e la messaggistica continua a funzionare, quindi deve provenire dalla configurazione. – jv42

+0

L'unico visto che ho visto danneggiato era in 'RaisePropertyChanged()', ma è stato documentato sul blog di @ LBugnion. – jv42

risposta

0

ho avuto la stessa cosa accada a me durante l'aggiornamento da una versione precedente di MVVM luce (cambio di set 3bdbffb4e70a “BL0014 Varie”). Immediatamente Send() ha smesso di funzionare.

Per risolvere il problema, provare a utilizzare l'overload .Register() con receiveDerivedMessagesToo impostato su true.

Questo problema può verificarsi quando Send() ing gli oggetti che hanno un certo tipo di DynamicProxy creato per loro. Ad esempio, EntityFramework farà ciò quando utilizzi la proprietà Local in una qualsiasi delle raccolte del tuo contesto dati.

ad es. EntityFramework DbContext per ctx.Dealers.Local genererà un elenco di elementi di tipo che assomigliano: System.Data.Entity.DynamicProxies.Dealer_D4CEAA0F527F5360DEB9B2B35305241B76A107C37B9DB8B368984B7DF69AEE1E

Quando corrispondenza al listener registrati Messenger.SendToTargetOrType() fallirà in quanto la Il tipo registrato è solo un "rivenditore" e non un proxy del rivenditore.

Perché questo ha funzionato senza richiedere receiveDerivedMessagesToo impostato su true e non ora?

precedenza MVVM Light "Messenger.cs" Messenger.SendToTargetOrType() ha avuto questo codice:

private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token) 
{ 
    var messageType = typeof(TMessage); 

Questo ha funzionato grande dal momento che il tipo effettivo dei dati che vengono passati non aveva importanza, proprio il tipo di sei iscritto genere.

Ora il codice è stato cambiato in:

private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token) 
{ 
    Type messageType = message.GetType(); 

Ora il tipo di parametro viene utilizzato al posto. Questo è un problema poiché se il tuo "messaggio" è di qualche tipo di proxy la ricerca di listener Registati fallirà.

Problemi correlati